HTTP协议头字段详解大全

 

Accept

表示客户端指望服务器返回的媒体格式。浏览器

Accept-Charset

表示客户端指望服务器返回的内容的编码格式。缓存

Accept-Language

表示客户端指望服务器返回的内容的语言。服务器

 

Content-Type

Content-Type是服务器向客户端发送的头,表明内容的媒体类型和编码格式,是对Accept头和Accept-Charset头的统一应答。并发

Content-Language

这个头字段内容是对Accept-Language的应答。服务器经过此字段告知客户端返回的Body信息的语言是什么。ui

Content-Length

表示传输的请求/响应的Body的长度。编码

Date

若是服务器没有缓存,那么Date就是响应的即时生成时间。若是服务器设有缓存,那么Date就是响应内容被缓存的时间。spa

Last-Modified

标记资源的最近修改时间,它和Date比较相似,区别是Last-Modified表明修改时间,而Date是建立时间。操作系统

If-Modified-Since

浏览器向服务器请求静态资源时,若是浏览器本地已经有了缓存,就会携带If-Modified-Since头,值为资源的Last-Modified时间,询问服务器该资源自从这个Last-Modified时间以后有没有被修改。若是没有修改过,就会向浏览器返回304 Not Modified通知浏览器能够放心使用缓存内的资源。若是资源修改过,那就像正常的GET请求同样,携带资源的内容返回200 OK。代理

If-Unmodified-Since

相似于If-Modified-Since,意义相反。区别是当服务器资源条件不知足时,不是返回304 Not Modified,而是返回412 Precondition Failed。orm

Age

表示资源缓存的年龄,也就是资源自缓存以来到如今已通过去了多少时间,单位是秒。

Expires

服务器使用Expect头来告知对方资源什么时候失效。

ETag

资源标签,每一个资源能够提供多个标签信息。它通常用来和下面的If-Match和If-None-Match配合使用,用来判断缓存资源的有效性。比较常见的标签是资源的版本号,好比能够拿资源数据的md5校验码做为版本号。

If-Match

If-Match的值通常是上面提到的ETag的值,它经常使用于HTTP的乐观锁。所谓HTTP乐观锁,是指客户端先GET这个资源获得ETag中的版本号,而后发起一个资源修改请求PUT|PATCH时经过If-Match头来指定资源的版本号,若是服务器资源知足If-Match中指定的版本号,请求就会被执行。若是不知足,说明资源被并发修改了,就须要返回状态码为412 Precondition failed 的错误。客户端能够选择放弃或者重试整个过程。

If-None-Match

相似于If-Match,只是条件相反。

 

ETag vs Last-Modified vs Expires

ETag通常携带的是资源的版本号,协议没有具体规定版本号是什么。它能够是资源的md5校验码,也能够是uuid,甚至能够是自增的数字,也能够是资源的修改时间。它的匹配方式是相等/不相等。由于服务器须要维护版本号,取决的版本号是什么,这多是一个存储和计算的负担。

Last-Modified携带的资源的修改时间。它的匹配方式是大于/小于。若是是静态资源文件,通常就是操做系统记录的文件修改时间。

Expires是服务器告知客户端资源的过时时间。客户端缓存的资源在这个时间以后自动过时,而不须要非得向服务器确认一下是否是304 Not Modified才认为没过时。

 

Cache-Control

这多是HTTP头里面最复杂的一个头了。这个头既能够用于请求,也能够用于响应。在请求和响应的取值不同,分别表明了不一样的意思。

  1. no-cache 若是no-cache没有指定值,那就表示不容许缓存。对于请求来讲,服务器不得使用缓存内容直接返回。对于响应来讲,客户端不得缓存响应的资源内容。若是no-cache指定了值,那就表示值对应的头信息不得使用缓存,其它的信息仍是能够缓存的。告知对方我只要新鲜刚出浴的数据。

  2. no-store 告知对方不要持久化请求/响应数据到其它地方,这种信息是敏感的,要保持它的易失性。告知对方记在内心(memory)就行,别写在纸上(disk)。

  3. no-transform 告知对方不要转换数据。好比客户端上传了raw图像数据,服务器通常都会选择性压缩图像数据进行存储。no-transform告知对方保留原始数据信息,不要进行任何转换。告知对方不要乱动我发过来的东西。

  4. only-if-cached 用于请求头,告知服务器只要那些已经缓存的内容,不要去reload。若是没有缓存内容就返回504 Gateway Timeout错误。表示客户端不想太麻烦服务器,有就给,没就算了。

  5. max-age 用于请求头。限制缓存内容的年龄,若是超过max-age年龄的,须要服务器去reload内容资源。这叫客户端的年龄歧视。

  6. max-stale 用于请求头。客户端容许服务器返回缓存已过时的资源内容,可是限定了最大过时时间。表示客户端虽然很宽容,那是也是有限度的。

  7. min-fresh 用于请求头。客户端限制服务器不要那些即将过时的资源内容。就比如咱们去超市买牛奶,若是牛奶快过时了虽然还在保质期内我们也就不会考虑。

  8. public 用于响应头。表示容许客户端缓存响应信息,并能够给别人使用。好比代理服务器缓存静态资源供全部代理用户使用。

  9. private 用于响应头。表示仅容许客户端缓存响应信息给本身使用,不得分享给别人。这样是为了禁止代理服务器进行缓存,而容许客户端本身缓存资源内容。意思是你我的留着用就行,别借给别人用。

 

Connection

当客户端和服务器须要协商链接的属性时,可使用Connection头部。比较经常使用的一个值是close,用来通知对方在当前请求结束后关闭链接。

Referer

Referer是很是经常使用的头,它表示请求的发起来源URI,也就是当前页面资源的父页面。

User-Agent

携带当前的用户代理信息,通常包含浏览器、浏览器内核和操做系统的版本型号信息。

 

https://mp.weixin.qq.com/s/RtKPGi9rIcfx1anadj_HWg

相关文章
相关标签/搜索