HTTP协议头字段详解大全

 

Accept

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

Accept-Charset

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

Accept-Language

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

 

Content-Type

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

Content-Language

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

Content-Length

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

Date

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

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。

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

转载于:https://my.oschina.net/u/3705388/blog/1784894

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值