《图解HTTP》学习记录五(报文首部字段①)

报文分为请求报文与响应报文,除开报文实体的差异之外,两者的报文首部内容上也不尽相同。下图是访问www.baidu.com的报文首部截图:

可见,请求报文首部第一行是由“请求方法+协议及其版本”组成的请求行,响应报文首部的第一行则是“状态码+协议及其版本组成的”状态行。此外,包含各种首部字段的HTTP首部字段行也是有差别的,一般将HTTP首部字段语句分为:通用首部字段、请求首部字段、响应首部字段、实体首部字段。所有的字段格式都是“key:value”这种形式,如果value值有多个,中间用逗号隔开。接下来,来具体介绍首部字段的各种属性值:

通用首部字段

即,响应报文和请求报文中均可以存在的首部字段,具体包括:
1.Cache-Control
用以操纵缓存的工作机制,虽为通用首部字段,但其参数指令在请求报文首部与响应报文首部略有不同:

  • pubulic/private:这是两个只存在于响应报文之中的功能相反的指令,pubulic代表可向任意方提供缓存,而private只能向特定用户提供缓存。
  • no-cache:防止从缓存中获取过期资源。
    若请求中包含该指令:则表示客户端不会接收缓存过的响应,缓存服务器会将请求直接转发给源服务器;
    若响应中包含该指令:缓存服务器则不能对资源进行缓存,且源服务器将不再对缓存服务器中提出的请求进行有效性确认,禁止其进行缓存操作。
  • no-store:暗示请求或响应中包含机密内容,禁止缓存。实际上该指令比no-cache更加强硬,是真正的禁止缓存。
  • no-transform:规定缓存不能改变实体主体的媒体类型。
  • max-age:形如Cache-Control:max-age:60000,其中的数字单位为秒。
    若请求中包含该指令:表示缓存的时间若比该时间小,则加载缓存。故当max-age的值为0时,缓存服务器会直接将请求转发给源服务器。
    若响应中包含该指令:缓存服务器将不再对资源的有效性进行确认,以max-age的数值来代表资源保存的最长缓存时间,其优先级是高于Expires的;
  • min-fresh:形如Cache-Control:min-fresh:60000,其中的数字单位为秒。表示过了XX秒后的资源都无法作为缓存返回。
  • max-stale:形如Cache -Control:max-stale:60000,其中的数字单位为秒。表示只要处于max-stale的时间范围内,无论缓存是否过期都会照常接收。若无值,则表示无限期接收缓存。
    PS:min-freshmax-stale构成了非常规处理缓存的上下限。
  • must-revalidate:代理会向源服务器再次验证即将返回的响应缓存是否有效,这是最高优先级的指令,会自动忽略max-stale

2.Conection
两个作用,其一是控制不再转发的首部字段名;其二是管理持久连接。

  • 控制不再转发的首部字段名

    转自《图解HTTP》

    如图所示,Connection:upgrade控制了名为Upgrade的首部字段,只让代理服务其接收该字段,代理转发过程中删除了有关Upgrade的语句。

  • 管理持久连接
    共有两个参数:close/keep-alive,前者表示断开连接,后者表示保持持久连接。

3.Data
表示该HTTP报文所创立的日期与时间。

4.Trailer
事先说明在报文主体后记录了哪些首部字段。

5.Transfer-Encodding
规定了传输报文主体时采用何种编码形式。

6.Upgrade
用以检测HTTP协议及其它协议是否可使用更高版本进行通信,其参数可以指定一个完全不同的通信协议,如:Upgrade: TSL/1.0,HTTP/1.1

7.Via
用于记录经过代理服务器的转发情况,常与Trace方法一块使用。

8.Warning
警告!

请求报文首部字段

请求报文首部字段意为只有请求报文特有的,只会出现在请求报文中的首部字段。用于补充请求的附加信息,客户端信息 以及对响应内容的优先级等等。
1.Accept
Accept字段可以告知服务器,用户代理能够处理的媒体类型及其优先级,可用type/subtype的这种形式来一次指定多个媒体类型,如:

  • 文本文件
    text/html,text/js,text/css
    application/xhtml+xml,application/xml
  • 图片文件
    image/gif,image/jpeg,image/png
  • 视频文件
    video/mpegvideo/quicktime
  • 二进制文件
    application/octec-stream,application/zip

若想要给显示的媒体类型添加优先级,则使用 q=(0~1)来表示权重值,当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。

2.Accept-Charset/Accept-Encoding/Accept-Language
这三个分别表示通知服务器用户代理所能支持的字符集/编码类型/以及支持的语言。同样的他们也能用q=(0~1)来表示优先级。

3.Authorization
告知服务器,用户代理的认证登录信息,是服务器返回401状态码用户登录后,给请求添加的登录信息,现在基本上不会使用这种方法。

4.From
来告知服务器用户的邮箱,仅仅是留下一个联系方式。

5.Host
它将告知服务器,请求的资源所处的互联网主机名和端口号,Host首部字段是HTTP/1.1规范中唯一一个必须包含在请求首部内的首部字段。由于一个IP地址下可能存在多个域名,所以需要Host来告诉服务器具体请求的是哪个资源。

6.Range
范围请求,告知服务器索取资源的范围。如:Range: bytes = 5000-10000意为请求获取从第5000个字节到10000个字节的资源。若获取成功,会抛出206,返回范围资源;失败,则抛出200,返回所有资源。

7.If-Match/If-Modified-Since/If-None-Match/If-Range/If-Unmodified-Since
形如If-xxx的这种请求首部字段称为条件请求,意为服务器只有满足条件请求的内容,才会执行请求。

  • If-Match:只有它的值与想要获取资源的实体标记(Etag)值相等时,服务器才会返回资源。
  • If-Modified-Since:如果在该字段指定的时间早于资源更新时间,则处理该请求。反之,则抛出304,使用缓存即可。
  • If-Range:范围请求,与Range字段一同使用。如果其值与实体标记(Etag)值相等,则返回指定的范围资源。若不等,则抛出200,返回所有资源。
  • If-None-Match/If-Unmodified-SinceIf-Match/If-Modified-Since否定方法。

8.Max-Forwards:通过TRACE方法或OPTIONS方法时,发送包含字段请求时,将以十进制形式指定经过服务器的最大数目。例如:Max-Forwards:3,规定经过服务器数目为3,没经过一个服务器其值将会-1,当其值为0时,所在服务器强制返回响应。

9.Refer
告知服务器请求原始资源的URL,出于安全性考虑也可以考虑不发送该字段。

10.TE
告知服务器客户端能够处理的传输编码方式及其优先级,他与Accept-Encoding很像,但仅用于传输编码。

11.User-Agent:该字段会将创建请求的浏览器及用户代理等信息传达个服务器。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容