http报文
一、用于http协议交互的信息被称为http报文,请求端发出的叫请求报文,服务端返回的叫响应报文。http报文一般由 报文首部,空行,报文主体构成。一般不一定要有报文主体。请求报文和响应报文的首部一般是由 请求行(包含用于请求的方法,请求URI和HTTP的版本),状态行(包含表明响应结果的状态码,原因短语和http版本。)首部字段(包括表示请求和响应的各种条件和属性的各类首部。一般由4种首部:通用首部,请求首部,响应首部,实体首部)。
二、报文是http的基本单位,有8位组字节流组成,通过http通信传输,实体主体是做为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体组成。http报文主体用于传输请求或响应的实体主体。通常报文主体等于实体主体,只是在传输进行编码操作时,实体主体内容发生变化。才会与报文主体产生差异。http内容编码,包括gzip(GNU zip),compress(unix 系统的标准压缩),deflate(zlib),identity(不进行编码)。http通信过程中,请求的资源过大,通过把数据分割多块,能让浏览器逐步显示页面,称为分块传输编码。http报文中使用多部分对象集合时,需要在首部字段里加上content-type。如果下载过程中遇到网络中断的情况,http获取部分范围请求时 ,首部字段Range来指定资源的byte范围。
三、内容协商机制,是指客户端与服务端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言,字符集,编码方式做为判断的基准。包含请求报文中的某些首部字段,包括(Accept,Accept-Charset,Accept-Encoding,Accept-Language,Content-Language)等基准。内容协商机制包括三种类型:服务器驱动协商,客户端驱动协商,透明协商。
返回结果的状态码
状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理的请求还是出现了错误。类别:1XX(信息性状态码,接收的请求正在处理);2XX(成功状态码,请求处理完毕);3XX(重定向状态码,需要进行附加操作以完成请求);4XX(客户端错误状态码,服务器无法处理请求);5XX(服务器错误状态码,服务器处理请求出错)。
一、200表示OK,204(NO Content)表示处理请求成功,但是响应主体没有内容;206范围请求,响应报文中包含content-Range指定范围实体内容。
二、3XX响应结果表明浏览器需要执行某些特殊处理以正确处理请求。301表示永久性重定向,该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所处的URI。302临时性重定向,表示请求的资源被分配了新的URI,本次请求使用资源新的URI,但保存书签还是使用之前的URI。303表示请求的资源存在另一个URI,应用GET请求方法定向获取资源。
三、4XX表示响应结果表示客户端是发生错误的原因。400(表示请求报文中有语法错误,需要更改请求的内容);401(该状态码表示发送的请求需要通过HTTP认证。);403(该状态码表示对请求资源的访问被服务器端拒绝了,可能是没有权限,或者权限出了问题);404(服务器上无法找到资源)
四、5XX服务器本身出现问题,500(表示服务器端在执行请求时发生错误,)503(表示服务器超负载或者正在停机维护);504(网关超时)
web服务器
一、如果一台服务器托管了多个域名,域名通过DNS解析的IP地址就是一样的,所以在发送http请求时必须在Host首部内完整指定主机名或者域名URI。
二、通信数据转发程序:网关、代理、隧道。 代理是一种有转发功能的应用程序,它扮演服务器和客户端之间的中间人角色。接收由客户端发送的请求,转发给服务器。同时也接收服务器端返回的响应转发给客户端。代理不改变URI,直接发送给前方持有资源的服务器。转发时附加via首部字段以标记出经过的主机信息。使用代理服务器的理由(利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的。),代理的基准分类:是否缓存,是否修改报文。代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上,代理再次收到相同请求时,可以将之前的缓存资源作为回应;不对报文进行任何加工的代理称为透明代理,反之称为非透明代理。 网关的工作机制和代理类似,但是网关可以让服务器提供非http服务。利用网关提供通信的安全性,在客户端与网关的通信线路上加密,提高安全性。比如网关可以连接数据库,web购物网站上,信用卡结算,网关可以和信用卡结算系统联动。隧道可以建立一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。隧道本身不会解析http请求,请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。
三、保存资源的缓存。缓存指代理服务器或者客户端本地磁盘内保存的资源副本。利用缓存可以减少对源服务器的访问,节省通信流量和通信时间。 缓存的有效期限,向源服务器确认资源的有效性,若失效则缓存服务器向源服务器获取新资源。客户端的缓存在临时网络文件中,若失效同样从服务器重新获取。
HTTP报文首部
一、在请求中,http报文首部由方法,URI,HTTP版本,首部字段构成;在响应中,http报文首部由HTTP版本,状态码,HTTP首部字段3部分构成。
二、http首部字段由首部字段名和字段值构成。中间用“:”分隔。http首部字段根据实际用途不同,分为四种类型:通用首部字段(请求报文和响应报文两方都会使用的报文),请求首部字段,客户端向服务器端发送请求报文时使用的字段;响应首部字段,从服务器端向客户端发送响应报文时使用的字段;实体首部字段(针对请求和响应报文实体部分使用的首部,补充了资源内容更新时间和实体有关信息)
三、通用首部字段:1、通过指定Cache-Control的指令操作缓存机制,指令参数可选多个指令用,连接。可用的指令按请求和响应区分。 请求指令(no-Cache 参数 无,强制向源服务器再次验证,防止从缓存中返回过期资源;no-store不缓存请求或响应的任何内容;max-age=[秒] 必需 响应的最大值,max-stale =[秒] 可忽略 接收已过期响应;min-fiesh=[秒]期望在指定时间内的响应有效;only-if-cache 从缓存获取资源) 响应指令(public可向任意方提供响应的缓存,private仅向特定用户返回响应;no-cache缓存前确认其有效性;no-store不缓存请求或响应的指令;max-age=[秒]响应的最大age值 s-maxage=[秒]公共缓存服务器响应的最大值) 2、Connection首部字段的两个作用:控制不再转发给代理的首部字段(参数是 首部字段名)。管理持久连接(默认为 keep-alive ,如果服务器想明确断开连接 connection值为 close) 3、date 创建http报文的时间和日期。4、Trailer会事先说明报文主体后记录了那些首部字段,该首部字段可用于http1.1版本分块传输编码时。5、Transfer-Encoding规定传输报文主体时采取的编码方式;6、via 追踪客户端和服务器之间请求与响应的报文传输路径。7、warning 告知用户一些与缓存相关的警告。
四、请求首部字段:从客户端往服务端发送的请求报文所使用的字段。1、Accept 通知服务器,用户代理能够处理的媒体类型和媒体类型的相对优先级(文本文件 text/html,text/css,text/plain,application/xml...;图片文件 image/jpeg,image/gif,image/png...;视频文件video/mpeg,video/quicktime...);若要给显示的媒体类型设置优先级,使用q=(0-1)来表示权重,用“;”分隔。2、Accept-charset 通知服务器 用户代理支持的字符集及字符集的优先级。3、Accept-Encoding 告知服务器用户代理所支持的内容编码及内容编码的优先级顺序。4、Accept-Language告知服务器用户代理所能处理的自然语言集及其优先级。5、Authorzation用来告知服务器用户代理的认证信息(证书值)6、Expect客户端告知服务器期望出现某种特定的行为,如果服务器达不到就会返回417的错误。8、form 用户代理告知服务器用户电子邮箱地址。9、Host 为必须。告知服务器请求资源所处的主机名和端口号,适用于一个服务器多个域名。当域名被发送到解析成ip地址发送的服务器时,必须指定主机名。10、if-xxx 称为条件请求,服务器接收到附带条件的请求后,只有判断条件为真时,才会执行请求。11、Max-Forwards指定可经过的服务器最大数目,当值为0时,服务器不再转发,直接返回响应。12、range对于只需获取部分资源的请求,包含首部字段range即可告知服务器资源的指定范围。13、referer,首部字段referer告知服务器请求的原始资源的URI。14、TE告知服务器客户端能处理响应的传输编码格式及相对优先级。14、user-agent会将创建请求的浏览器及用户代理信息传递给服务器。
五、响应首部字段:由服务器向客户端返回响应报文所使用的字段。1、Accept-Ranges用来告知客户端 服务器能否处理范围请求,以指定获取服务端某个范围请求。字段值 :bytes表示可处理范围请求,none表示不能处理。2、Age 告知客户端,源服务器在多久前创建了响应,字段单位值为秒。3、ETag告知客户端实体标识,是一种可将资源以字符串形式做唯一标识的方式,服务器会为每一份资源分配ETag值。资源被缓存时,就会被分配唯一标识。4、Loaction 此首部字段可将响应接收方引导至某个与请求URI位置不同的资源。基本上该字段都会配合 3xx:Redirection的响应,提供重定向的URI。5、proxy-Authenticate把由代理服务器所要求的认证信息发送给客户端。6、Retry-After告知客户端应该在多久之后再次发送请求,配合状态码503响应或者和3xx一起使用,字段值可以使具体时间也可以是是秒数。7、sever 告知客户端当前服务器上安装的HTTP服务器应用程序信息,不单指软件应用名称,还包括版本号和安装启用时的可选项。8、vary可对缓存进行控制,源服务器会像代理服务器传达关于本地缓存使用方法的指令。代理服务器收到以后,若再进行缓存,只对请求中还有vary指定首部字段的请求返回缓存,即使对相同资源发送请求,但由于vary指定的首部字段不同,因此必须从源服务器重新获取资源。9、www-Authenticate用于HTTP访问认证。告知客户端用于访问请求URI所指定的认证方案和带参数提示的质询。
六、实体首部字段。包含请求和响应报文中实体部分所使用的首部。1、Allow用于通知客户端能够支持的Request-URI指定资源的所有HTTP方法,(GET POST等),当服务器接收到不支持的HTTP方法时,会以状态码405返回,同时还会把所有支持的HTTP方法写入Allow字段返回。2、Content-Encoding 告知客户端 服务器对实体的主体部分选用的内容编码方式。内容编码是指在不丢失实体信息的前提下进行的压缩。主要有 gzip,compress,deflate,identity四种。3、Content-Language告知客户端实体主体使用的自然语言。4、content-Length实体主体部分的大小。5、content-Location报文主体返回资源对应的URI。6、content-MD5一串由MD5算法生成的值,目的在于检查报文主体传输过程中是否保持完整以及确认传输到达。7、content-Range告知客户端作为响应返回实体的那个部分符合范围请求,以字节为单位。8、content-Type实体主体内对象的媒体类型。9、Expires会将资源失效的日期告诉客户端。缓存服务器在接收到含有Expries的响应后,会以缓存来应答请求,在expires日期之前,响应副本一直保存。超过时间后,会像服务器请求资源。源服务器不想要缓存时,在首部字段内写入和首部字段Date相同的字段值。10、Last-Modified资源最终修改时间。
七、为cookie服务的首部字段,1、Set-Cookie服务器开始管理客户端状态时,会事先告知各种信息。 属性 NAME = VAULE赋予cookie的名称和其值。expires = DATE cookie的有效期,若不指定,默认浏览器关闭前为止。 path = PATH 限制指定cookie的发送范围的文件目录。 domain = 域名。做到与结尾匹配一致。 secure,限制web页面仅在HTTPS安全连接时,才可以发送cookie。HttpOnly是cookie的扩展功能,使js脚本无法获取cookie。主要是防止跨站脚本攻击(xss,Cross-sitescripting)对cookie信息的获取。2、cookie :status = enable 告知服务器,客户端想获得HTTP状态管理支持时,就会在请求中包含从服务器获取的cookie,接收到多个cookie时,也会以多个cookie形式发送。
八、其他首部字段。1、X-Frame-Options属于HTTP响应首部,控制网站内容在其他web网站的Frame标签内的显示问题。主要内容是为了防止点击劫持(clickjacking)攻击。字段值:DENY 拒绝;SAMEORIGIN仅同源域名下的页面匹配许可。2、X-XSS-Protection属于响应首部,是针对跨站脚本攻击(xss)的一种对策,适用于控制浏览器xss防护机制的开关。字段值:0 将XSS过滤设置成无效状态,1 将XSS过滤设置成有效状态。 3、DNT 是一种请求首部 ,Do not Tack 拒绝个人信息被收集,表示拒绝被精准广告追踪的一种方法,0 同意被追踪,1 拒绝被追踪。4、P3P属于HTTP响应首部,通过利于p3p(在线隐私偏好平台)技术,可以让web网站个人隐私变成一种仅供程序可理解的形式,已达到保护隐私的目的。