HTTP 请求头各参数具体含义

HTTP的头域包括通用头、请求头、响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。

  • 通用头部:是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。
  • 请求头部:是请求报文特有的,它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部。
  • 响应头部:便于客户端提供信息,比如,客服端在与哪种类型的服务器进行交互,如Server头部。
  • 实体头部:指的是用于应对实体主体部分的头部,比如,可以用实体头部来说明实体主体部分的数据类型,如Content-Type头部。
Header解释示例
                                                                                 http请求头
Accept告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-typeAccept: text/plain, text/html
Accept-Charset浏览器告诉服务器自己能接收的字符集。Accept-Charset: iso-8859-5
Accept-Encoding浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)。Accept-Encoding: compress, gzip
Accept-Language浏览器申明自己接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等Accept-Language: zh-CN
Authorization当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,用该头部来回应自己的身份验证信息给WEB服务器。Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
If-Match如果对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动作,获取文档If-Match: “737060cd8c284d8af7ad3082f209582d”
If-None-Match如果对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动作,获取文档If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since如果请求的对象在该头部指定的时间之后修改了,才执行请求的动作(比如返回对象),否则返回代码304,告诉浏览器该对象没有修改。If-Modified-Since:Thu, 10 May 2020 09:14:42 GMT
If-Unmodified-Since如果请求的对象在该头部指定的时间之后没修改过,才执行请求的动作(比如返回对象)If-Unmodified-Since: Sat, 29 May 2020 19:43:31 GMT
If-Range浏览器告诉 WEB 服务器,如果我请求的对象没有改变,就把我缺少的部分给我,如果对象改变了,就把整个对象给我。浏览器通过发送请求对象的ETag 或者自己所知道的最后修改时间给 WEB 服务器,让其判断对象是否改变了。总是跟 Range 头部一起使用。If-Range: “737060cd8c284d8af7ad3082f209582d”
Range浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分Range: bytes=1173546
Proxy-Authorization代理服务器响应浏览器,要求其提供代理身份验证信息Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Host客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号Host:rss.sina.com.cn
Referer浏览器向WEB 服务器表明自己是从哪个网页URL获得点击当前请求中的网址/URLReferer:http://www.ecdoer.com/
User-Agent浏览器表明自己的身份(是哪种浏览器)User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN;rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
                                                                             http通用头
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。(我把这些个指令的含义放在了文章的最下方。)

Cache-Control: no-cache

Cache-Control各个消息中的指令含义如下:

PragmaPragma头域用来包含实现特定的指令,在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同最常用的是Pragma:no-cache
ConnectionConnection表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

Connection: close

Connection各参数含义在文章下方

DateDate头域表示消息发送的时间,服务器响应中要包含这个头部,因为缓存在评估响应的新鲜度时要用到,其时间的描述格式由RFC822定义。Date:Mon, 31 May 2020 04:25:57 GMT。(Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。)
Transfer-EncodingEB 服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked)Transfer-Encoding: chunked
Upgrade它可以指定另一种可能完全不同的协议,如HTTP/1.1客户端可以向服务器发送一条HTTP/1.0请求,其中包含值为“HTTP/1.1”的Update头部,这样客户端就可以测试一下服务器是否也使用HTTP/1.1了。Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Via

列出从客户端到 OCS 或者相反方向的响应经过了哪些代理服务器,他们用什么协议(和版本)发送的请求。

当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添加 Via 头部,并填上自己的相关信息,当下一个代理服务器 收到第一个代理服务器的请求时,会在自己发出的请求里面复制前一个代理服务器的请求的Via头部,并把自己的相关信息加到后面,以此类推,当 OCS 收到最后一个代理服务器的请求时,检查 Via 头部,就知道该请求所经过的路由。

Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
                                                                     http响应头
Age当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。(以秒计,非负)Age: 12
ServerWEB 服务器表明自己是什么软件及版本等信息。Server:Apache/2.0.61 (Unix)
Accept-RangesWEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。bytes:表示接受,none:表示不接受。Accept-Ranges: bytes
Vary

告诉下游代理是使用缓存响应还是从原始服务器请求。

假如源WEB服务器在接到第一个请求消息时,其响应消息的头部为:Content-Encoding: gzip; Vary: Content-Encoding,那么Cache服务器会分析后续请求消息的头部,检查其Accept-Encoding,是否跟先前响应的Vary头部值一致,即是否使用相同的内容编码方法,这样就可以防止Cache服务器用自己Cache 里面压缩后的实体响应给不具备解压能力的浏览器。

Vary:Accept-Encoding
                                                                              HTTP实体头
Allow服务器支持哪些请求方法(如GET、POST等)。Allow: GET, HEAD
Location表示客户应当到哪里去提取文档,用于将接收端定位到资源的位置(URL)上。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。Location: http://www.zcmhi.com/archives/94.html
Content-LanguageWEB 服务器告诉浏览器理解主体时最适宜使用的自然语言Content-Language: en,zh
Content-EncodingWEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。Content-Encoding:gzip
Content-LengthWEB服务器告诉浏览器自己响应的对象的长度或尺寸Content-Length: 26012
Content-Location资源实际所处的位置Content-Location: /index.htm
Content-MD5主体的MD5校验和。Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range

实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。

Content-Range表示传送的范围,Content-Length表示实际传送的字节数。

Content-Range: bytes 21010-47021/47022
Content-TypeWEB 服务器告诉浏览器自己响应的对象的类型。Content-Type:application/xml
Etag

请求变量的实体标签的当前值

就是一个对象(比如URL)的标志值,就一个对象而言,比如一个html文件,如果被修改了,其Etag也会别修改,所以,ETag的作用跟Last-Modified的作用差不多,主要供WEB服务器判断一个对象是否改变了。比如前一次请求某个html文件时,获得了其 ETag,当这次又请求这个文件时,浏览器就会把先前获得ETag值发送给WEB服务器,然后WEB服务器会把这个ETag跟该文件的当前ETag进行对比,然后就知道这个文件有没有改变了。

ETag: “737060cd8c284d8af7ad3082f209582d”
Expires

响应过期的日期和时间

对于过期了的对象,只有在跟WEB服务器验证了其有效性后,才能用来响应客户请求。

Expires:Sat, 23 May 2020 10:02:12 GMT
Last-Modified

WEB服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。

 

Last-Modified:Tue, 06 May 2020 02:42:43 GMT

Cache-Control各个消息中的指令含义如下:

  1. no-cache:指示请求或响应消息不能缓存,实际上是可以存储在本地缓存区中的,只是在与原始服务器进行新鲜度验证之前,缓存不能将其提供给客户端使用。

  2. no-store:缓存应该尽快从存储器中删除文档的所有痕迹,因为其中可能会包含敏感信息。

  3. max-age:缓存无法返回缓存时间长于max-age规定秒的文档,若不超规定秒浏览器将不会发送对应的请求到服务器,数据由缓存直接返回;超过这一时间段才进一步由服务器决定是返回新数据还是仍由缓存提供。若同时还发送了max-stale指令,则使用期可能会超过其过期时间。

  4. min-fresh:至少在未来规定秒内文档要保持新鲜,接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象。

  5. max-stale:指示客户端可以接收过期响应消息,如果指定max-stale消息的值,那么客户端可以接收过期但在指定值之内的响应消息。

  6. only-if-cached:只有当缓存中有副本存在时,客户端才会获得一份副本。

  7. Public:指示响应可被任何缓存区缓存,可以用缓存内容回应任何用户。

  8. Private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理,只能用缓存内容回应先前请求该内容的那个用户。

Connection各参数含义:

  1. Close:告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了。
  2. Keepalive:告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求。
  3. Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒),如Keep-Alive:300。