HTTP学习笔记:HTTP首部字段(1)

来源:互联网 发布:绿地控股历史价格数据 编辑:程序博客网 时间:2024/06/15 20:16

HTTP报文首部

HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

HTTP请求报文

在请求中,HTTP报文首部由以下几部分构成:

  • 请求行:方法、URI、HTTP版本
  • HTTP首部字段:
    • 请求首部字段
    • 通用首部字段
    • 实体首部字段

HTTP响应报文

在响应中,HTTP报文首部由以下几个部分构成:

  • 状态行:HTTP版本、状态码
  • HTTP首部字段
    • 响应首部字段
    • 通用首部字段
    • 实体首部字段

首部字段同时存在与请求和响应报文内,并涵盖HTTP报文相关的内容信息。

HTTP首部字段

HTTP首部字段是由首部字段名和字段值构成的,中间用冒号分隔。

HTTP首部字段根据实际用途被分为以下4种类型:

  • 通用首部字段
    请求报文和响应报文两方都会使用的首部

  • 请求首部字段
    从客户端向服务器端发送请求报文时使用的首部。
    补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。

  • 响应首部字段
    从服务器端向客户端返回响应报文时使用的首部。
    补充了响应的附加内容,也会要求客户端附加额外的内容信息。

  • 实体首部字段
    针对请求报文和响应报文的实体部分使用的首部。
    补充了资源内容更新时间等与实体有关的信息。

通用首部字段

请求报文和响应报文两方都会使用的首部。

Cache-Control

用于操作HTTP缓存。多个指令之间通过“,”分隔。

表示是否能缓存的指令

  • public指令
Cache-Controlpublic

当指定使用public指令时,则明确表明其他用户也可以利用缓存。

  • private指令
Cache-Controlprivate

当指定private指令后,响应只以特定的用户作为对象,这与public指令的行为相反。
缓存服务器会对该特定用户提供资源缓存的服务,对其他用户发送过来的请求则不会返回缓存。

  • no-cache指令
Cache-Control:no-cache

使用no-cache指令的目的是为了防止从缓存中返回过期的资源。每次在使用缓存之前都强制发送请求给源服务器进行验证,检查文件该没改变

从字面上理解很容易以为no-cache表示不缓存,但事实上no-cache代表不缓存过期的资源,缓存会向服务器进行有效性确认后处理资源。
后面提到的no-store才是不缓存资源。

  • no-store指令
Cache-Control:no-store

该指令规定缓存不能在本地存储请求或者响应。

与到期时间相关的指令

  • s-maxage指令
Cache-Control:s-maxage=604800(单位:秒)

s-maxage指令的功能和max-age指令相同,它们的不同点是s-maxage指令只适用于供多位用户使用的公共缓存服务器(即一般代理)
也就是说,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。

另外,使用s-maxage指令后,则直接忽略对Expires首部字段及max-age指令的处理。

  • max-age指令
    设置缓存存储的最大周期,超过这个时间缓存被认为过期
Cache-Controlmax-age=604800(单位:秒)

这里写图片描述
当客户端发送的请求中包含max-age时,如果判定缓存资源的缓存时间比指定时间的数值更小,那么客户端就接受缓存的资源。

如果max-age指定为0,那么缓存服务器通常需要将请求转发给源服务器。

当服务器返回的响应中包含max-age时,缓存服务器将不对资源的有效性再做确认,max-age代表资源保存为缓存的最长时间。

在同时遇到Expires首部字段和max-age时,会优先处理max-age指令而忽略掉Expires首部字段。

  • min-fresh
Cache-Controlmin-fresh=60

min-fresh指令要求缓存服务器返回还未过指定时间的缓存资源。

  • max-stale指令

表示客户端愿意接收一个已经过期的资源。 可选的设置一个时间(单位秒),表示响应不能超过的过期时间。

Cache-Controlmax-stale=3600

如果指令未指定参数值,那么无论经过多久客户端都会接受缓存。
如果指令中指定了具体数值,那么只接受过期时间处于指定数值内的缓存。

  • only-if-cached
Cache-Control:only-if-cached

表示不要去获取新数据。客户端只希望获取缓存的响应,并且不去联系服务器去检查是否存在较新的副本。

与验证相关的指令

  • must-revalidate
Cache-Control:must-revalidate

使用这个指令,代理会向源服务器再次验证缓存是否有效。
另外,使用这条指令会忽略max-stale指令。

  • proxy-revalidate
Cache-Control: proxy-revalidate

与must-revalidate相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略。

  • no-transform
Cache-Control: no-transform

表示无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型。

这样做可以防止缓存或代理压缩图片等类似操作。

Connection

这个首部具备以下两个作用:

控制不再转发

Connection:不再转发的首部字段名

在代理向服务器进行转发时,将会删除指定的首部字段。

管理持久连接

Connection:close

HTTP 1.1版本的默认连接都是持久连接。当服务器想明确断开连接时则指定Connection首部字段为Close。

Connection:Keep-Alive

之前旧版本的HTTP默认连接都是非持久连接,为此如果想在旧版本的HTTP协议上维持持续连接,则需要指定为keep-alive。

客户端发送请求给服务器时,服务器端返回的响应中的首部字段会加上Keep-Alive和Connection后返回。

Date

表明创建HTTP报文的日期和时间。

Date:Sat, 07 Jan 2017 11:52:19 GMT

Trailer

这个字段会事先说明在报文主体后记录了哪些首部字段。
这个字段可应用在分块传输编码。

HTTP/1.1 200 OK Content-Type: text/plain Transfer-Encoding: chunkedTrailer: Expires7\r\n Mozilla\r\n 9\r\n Developer\r\n 7\r\n Network\r\n 0\r\n \r\nExpires: Wed, 21 Oct 2015 07:28:00 GMT

可以看到在首部中Trailer指定了Expires字段。这个字段在报文主体的后面也出现了。

Transfer-Encoding

规定了传输报文主体时采用的编码方式。

Upgrade

用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。

Via

为了追踪客户端与服务器之间的报文传输路径。

报文经过代理或者网关时,会现在首部字段Via中附加该服务器的信息然后再进行转发。

Via不仅用于追踪报文的转发,还可以避免请求回环的发生,所以必须在经过代理时附加该首部字段内容。

Via首部用于追踪传输路径,因此经常和TRACE方法一起使用。

Warning

会告知用户一些与缓存相关的问题的警告。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 义务兵学技术不好班长打他怎么办 耳朵被打了一巴掌听不见了怎么办 耳朵被打了一巴掌后有点闷怎么办 山东省教育云平台密码戳完怎么办 被舍友知道发朋友圈说她们了怎么办 苍蝇药水进眼里了眼睛疼怎么办 三十六周了胎儿还没有入骨盆怎么办 怀孕40周了宝宝还没反应怎么办 程序员不知道自己犯法了怎么办啊 大学档案学年测评有涂改痕迹怎么办 驼背怎么办要能快速矫正的方法 手臂往后扭后手臂根部疼又肿怎么办 一岁四个月宝宝有点斜颈怎么办? 六个月的宝宝脖子有点歪怎么办 情感交叉擦腿综合症心里治疗怎么办 坐月子受风了胳膊腿疼怎么办 劲椎手术两个月双腿疼痛麻这怎么办 手机里存的照片删除了怎么办 买了好几双鞋子都不防滑怎么办 电脑平车车加绒过厚不起线怎么办 碰见那种看不起人的店员应该怎么办 在食品厂上班載卫生帽头发痒怎么办 工司没给员工上保险离职后怎么办 货物被香港律政司扣了怎么办 室友考研要跟我考一样的学校怎么办 药流第一天才吃了一粒米非司怎么办 药流半月同房第二天大出血怎么办 口臭想让它变得不臭怎么办 来单位干了几天不满意想离职怎么办 药流吃药期间吃什么吐什么怎么办 养狗家里味道大怎么办养花有用吗 第一天上班站的脚疼怎么办 入职没有人事所需要的证书怎么办 入职第一天后不想去了怎么办 警察在执法过程中殴打群众怎么办 肾结石打了3天针痛得厉害怎么办 征兵体检过了到部队退兵怎么办 圆通快递要求退回结果被签收怎么办 新生儿蛋蛋淹了破皮了怎么办 要是和同学玩的时候打到睾丸怎么办 睾丸撞了一下里面碎了怎么办