本章主要是讲解HTTP的首部,所以会有点长
1、
HTTP协议的请求和响应报文中必定包含HTTP首部,首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。
2、HTTP首部字段是由首部字段名和字段值构成的,中间用冒号“:”分割。
3、4种HTTP首部字段类型
- 通用首部字段,请求报文和响应报文两方都会使用的首部;
- 请求首部字段,从客户端向服务器端发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息;
- 响应首部字段,从服务端向客户端返回响应报文时使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息;
- 实体首部字段,针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息。
4、HTTP/1.1首部字段一览,HTTP/1.1规范定义了如下47种首部字段:
5、HTTP/1.1通用首部字段
-
Cache-Control,通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制;
- public指令,当指定使用public指令时,则明确表明其他用户也可利用缓存;
- private指令,当指定private指令后,响应只以特定的用户作为对象;缓存服务器会对该特定用户提供资源缓存的服务,对于其他用户发送过来的请求,代理服务器则不回返回缓存;
- no-cache指令,防止从缓存种返回过期的资源;客户端发送的请求种如果包含该指令则表示客户端不会接收缓存过的响应;服务端返回的响应中包含该指令,那么缓存服务器不能对资源进行缓存,源服务器以后也将不再对缓存服务器请求中的资源有效性进行确认,且禁止其对响应资源进行缓存操作;
- no-store,暗示请求或响应中包含机密信息;事实上no-cache代表不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源;no-store才是真正的不进行缓存;
- s-maxage,功能和max-age指令相同,不同点是s-maxage指令只适用于供多位用户使用的公共缓存服务器;当使用s-maxage指令后,则直接忽略对Expires首部字段及max-age指令的处理;
- max-age,如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源;应用HTTP/1.1版本的缓存服务器同时存在Expires首部字段和max-age,会优先处理max-age指令,而忽略掉Expires首部字段;而HTTP/1.1版本的缓存服务器的情况却相反;
- min-fresh,要求缓存服务器返回至少还未过指定时间的缓存资源;
- max-state,如果指令未指定参数值,那么无论经过多久,客户端都会接收响应;如果指令中指定了具体数值,即使过期,只要仍处于max-stale指定的时间内,仍旧会被客户端接收;
- only-if-cached,表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回;
- must-revalidate,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效;使用该指令会忽略max-stale指令;
- proxy-revalidate,要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性;
- no-transform,规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型;
-
Connection,控制不再转发给代理的首部字段;管理持久连接;HTTP/1.1版本的默认连接都是持久连接;
-
Date,表明创建HTTP报文的日期和时间;
-
Pragma,是HTTP/1.1之前版本的历史遗留字段,仅作为与HTTP/1.0的向后兼容而定义;
-
Trailer,会事先说明在报文主体后记录了哪些首部字段;
-
Transfer-Encoding,规定了传输报文主体时采用的编码方式;HTTP/1.1的传输编码方式仅对分块传输编码有效;
-
Upgrade,用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议;
-
Via,追踪客户端与服务器之间的请求和响应报文的传输路径;
-
Warning,是从HTTP/1.0的响应首部(Retry-After)演变过来的,通常会告知用户一些与缓存相关的问题的警告;Warning首部的格式如下:
6、请求首部字段
- Accept,通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级;
- Accept-Charset,用来通知服务器,用户代理支持的字符集及字符集的相对优先顺序;
- Accept-Encoding,告知服务器,用户代理支持的内容编码及内容编码的优先级顺序;
- Accept-Language,告知服务器,用户代理能够处理的自然语言集,以及自然语言集的相对优先级;
- Authorization,告知服务器,用户代理的认证信息;
- Expect,告知服务器,期望出现的某种特定行为;
- From,告知服务器使用用户代理的电子邮件地址;
- Host,告知服务器,请求的资源所处的互联网主机名和端口号;
- If-Match,形如If-xxx这种样式的请求首部字段,都可称为条件请求;服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求;
- If-Modified-Since,告知服务器,若该字段值早于资源的更新时间,则希望能处理该请求;
- If-None-Match,用于指定If-None-Match字段值的实体标记(ETag)值与请求资源的ETag不一致时,它就告知服务器处理该请求;
- If-Range,告知服务器若指定If-Range字段值和请求资源的ETag值或时间相一致时,则作为范围请求处理,否则返回全体资源;
- If-Unmodified-Since,告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求;
- Max-Forwards,通过TRACE方法或OPTIONS方法,发送包含首部字段Max-Forwards的请求时,该字段以十进制整数形式指定可经过的服务器最大数目;
- Proxy-Authorization,接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息;
- Range,只需要获取部分资源的范围请求,接到附带Range首部字段请求的服务器,会在处理请求之后返回状态码为206Partial Content的响应;无法处理该范围的请求时,则会返回状态码200 OK的响应及全部资源;
- Referer,告知服务器请求的原始资源的URI;
- TE,告知服务器客户端能够处理响应的传输编码方式及相对优先级;它和首部字段Accept-Encoding的功能很像,但是用于传输编码;
- User-Agent,将创建请求的浏览器和用户代理名称等信息传达给服务器;
7、响应首部字段
- Accept-Ranges,用来告知客户端,服务器是否能处理范围请求,以指定获取服务器端某个部分的资源;可指定的字段值有两种:可处理bytes,不可处理none;
- Age,告知客户端,源服务器在多久前创建了响应;单位为秒;
- ETag,首部字段ETag能告知客户端实体标识,是一种可将资源以字符串形式做唯一标识的方式;
- Location,将响应接收方引导至某个与请求URI位置不同的资源;
- Proxy-Authenticate,把由代理服务器所要求的认证信息发送给客户端;
- Retry-After,告知客户端应该在多久之后再次发送请求;
- Server,告知客户端,当前服务器上安装的HTTP服务器应用程序的信息;
- Vary,可对缓存进行控制,源服务器会向代理服务器传达关于本地缓存使用方法的命令;
- WWW-Authenticate,用于HTTP访问认证;
8、实体首部字段
- Allow,通知客户端能够支持Request-URI指定资源的所有HTTP方法;
- Content-Encoding,告知客户端,服务器对实体的主体部分选用的内容编码方式;
- Content-Language,告知客户端,实体主体使用的自然语言;
- Contetn-Length,表明了实体主体部分的大小;
- Content-Location,给出与报文主体部相对应的URI;
- Content-MD5,是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达;
- Content-Range,针对范围请求,返回响应时使用的首部字段Content-Range,能告知客户端作为响应返回的实体的哪个部分符合范围要求;字段值以字节为单位;
- Content-Type,说明实体主体内对象的媒体类型;
- Expires,会将资源失效的日期告知客户端;
- Last-Modified,指明资源最终修改的时间;
9、为Cookie服务的首部字段
- Set-Cookie,开始状态管理所使用的Cookie信息,响应首部字段;
- Cookie,服务器接收到的Cookie信息,请求首部字段;