一、通用头部字段(General Header Fields)
该字段在请求头和响应头都会使用到,下面是常用的头部字段。
①、Cache-Control
设置请求或响应链上所有的缓存机制的工作机制。如果用private修饰,说明缓存是私有的,仅向特定的用户提供相应的缓存信息;如果是public修饰,说明缓存是共享的,意味着可以向任意用户提供相应的缓存信息。Max-age=10表示缓存的有效期为10秒,下面的Expires表示缓存的过期时间,Last-Modified表示缓存的最后修改时间,两者的时间差正好是10秒。
该字段还可以对应其他的参数:
参数名 | 描述 |
no-cache | 如果是客户端的话,说明客户端不会接收缓存过的响应,要请求最新的内容。而服务器端则表示缓存服务器不能对相应的资源进行缓存。 |
no-store | 表示缓存不能在本地存储。 |
max-age | 该参数后方会被赋值上相应的秒数,在请求头中表示如果缓存时间没有超过这个值就返回给我。而在响应头中时,则表示资源在缓存服务器中缓存的最大时间。 |
only-if-cached | 表示客户端仅仅请求缓存服务器上的内容,如果缓存服务器上没有请求的内容,那么返回504 Gateway Timeout。 |
must-revalidata | 表示缓存服务器在返回资源是,必须向资源服务器确认其缓存的有效性。 |
no-transform | 无论请求还是响应,都不能在传输的过程中改变报文体的媒体类型。 |
②、Connection
该字段可以控制不转发给代理服务器的首部字段以及管理持久连接,下方这个响应报文头中的Connection就是用来管理持久连接的,其参数为keep-alive,就是保持持久连接的意思。可以使用close参数将其关闭。
③、Transfer-Encoding
该字段表示报文在传输过程中采用的编码方式,在HTTP/1.1的报文传输过程中仅对分块编码有效。下方截图中Transfer-Encoding的值为chunked(分块),说明报文是分块进行传输的。
二、请求头部字段 (Request Header Fields)
请求头部字段当然是在请求头中才使用的字段。该字段用于补充请求的附加信息,客户端信息等。
①、Accept
该字段可通知服务器用户代理能够处理的媒体类型以及该媒体类型对应的优先级。媒体类型可使用“type/subtype”这种形式来指定,分号后边紧跟着的是该类型的优先级。如下所示。
②、Accept-Encoding
该字段用来告知服务器,客户端这边可支持的内容编码以及相应内容编码的优先级, 下方就是Accept-Encoding的用法。gzip表示由文件压缩程序gzip(GNU zip)生成的编码格式。compress表示UNIX文件压缩程序compress生成的编码格式。deflate表示组合使用zlib格式以及有deflate压缩算法生成的编码格式。identity表示不执行压缩或者使用一致的默认编码格式。
③、Accept-Language
该字段用来告知服务器,客户端可处理的自然语言集,以及对应语言集的优先级。以下方的截图为例,Accept-Language后方跟了三个属性,分别是“zh-CN”, "zh;q=0.8",“en;q=0.6”。
也就是说客户端可处理三种自然预言集,zh-CN,其优先级是1(最高)。第二种是zh ,其优先级是0.8,次之。第三个是en,优先级为0.6,优先级在三者之间最低。
④、Authorization
用来告知服务器用户端的认证信息,下方就是连接公司内部SVN系统时需要认证时的请求头部信息。
If-Modified-Since与If-Unmodified-Since
If-Modified-Since也是带有逻辑判断的请求头部字段,该字段后方跟的是一个日期,意思是在该日期后发生了资源更新,那么服务器就会处理该请求。If-Unmodified-Since就是 If-Modified-Since的非操作。
Referer
其实Referer是一个错误的拼写,但是一直在使用。正确的英文单词应该是Referrer(此处可翻译为:来历、来路)。Referer字段后方跟的是一个URI, 该URI就是发起请求的URI,具体如下所示:
User-Agent
该字段会将请求方的浏览器和用户代理名称等信息传达给服务器。下方就是从我当前笔记本的Chrome浏览器请求网络时的User-Agent信息。
三、响应头部字段 (Request Header Fields)
响应头是由Server向Client返回响应报文中使用的头部信息。用户补充响应的附加信息、服务信息等。
Server
该响应字段表明了服务器端使用的服务器型号,下方是博客园某张图片的响应头,使用的Web服务器是Tengine, Tengin是淘宝发起的Web服务器项目,是基于Nginx的。
Vary
Vary可对缓存进行控制,通过该字段,源服务器会向代理服务器传达关于本地缓存使用方法的命令。下方就是Vary的使用,Vary后方的参数是Accept-Encoding。其意思是返回的缓存要以Accept-Encoding为准。当请求的Accept-Encoding的参数与缓存内容的Accept-Encoding参数一致时就返回缓存内容,否则就请求源服务器。