「图解HTTP」读书笔记我爱编程

「 图解HTTP 」 读书笔记 第 六 章上

2017-12-26  本文已影响15人  13kmsteady

HTTP 首部

1. HTTP 报文首部

HTTP 报文结构.png

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

报文首部构成

HTTP 首部字段包含的信息最为丰富,首部字段同时存在于请求和响应报文内,并涵盖 HTTP 报文相关的内容信息

2. HTTP 首部字段

2.1 HTTP 首部字段传递重要信息

HTTP 首部字段是构成 HTTP 报文的要素之一。使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证消息等内容

HTTP 首部字段.png
2.2 HTTP 首部字段结构

HTTP 首部字段是由字段名和字段值构成,中间用 : 分割

首部字段名:字段值

示例:

Content-Type:text/html

字段值对应单个 HTTP 首部字段可以由多个值

Keep-Alive:timeout=15,max=100
2.3 4 种 HTTP 首部字段类型

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

2.4 HTTP 首部字段一览

HTTP/1.1 规范定义了如下 47 种首部字段

2.5 非 HTTP/1.1 首部字段

CookieSet-CookieContent-Disposition 等在其他 RFC 种定义的首部字段

2.6 End-to-end 首部和 Hop-by-hop 首部

HTTP 首部字段将定义成缓存代理和非缓存代理的行为分成两种类型

3. HTTP/1.1 通用首部字段

通用首部字段是指,请求和响应报文都会用到的首部

3.1 Cache-Control

通过指定首部字段 Cache-Control 的指令,就能操作缓存的工作机制

Cache-Control.png

首部字段 Cache-Control 能够控制缓存的行为

指令的参数是可选的,多个指令之间通过 “,”分割,首部字段 Cache-Control 的指令可用于请求及响应时

Cache-Control:private,max-age=0,no-cache

可用的指令按请求和响应分类

表示是否能缓存的指令

3.2 Connection

Connection 首部字段具备如下两个作用

3.3 Date

首部字段 Date 表明创建 HTTP 报文的日期和时间

Date.png

HTTP/1.1 协议中日期时间的格式

Date: Tue, 03 Jul 2012 04:40:59 GMT
3.4 Pragma

Pragma 是 HTTP/1.1 之前版本的历史遗留字段,仅作为与 HTTP/1.0 的向后兼容而定义

Pragma: no-cache

只用在客户端发送的请求中,客户端会要求所有的中间服务器不返回缓存的资源

Pragma.png
3.5 Trailer
Tralier.png

首部字段 Trailer 会事先说明在报文主体后记录了哪些首部字段,该首部字段可用在 HTTP/1.1 版本分块传输编码时

HTTP/1.1 200 OK
Date: Tue, 03 Jul 2012 04:40:56 GMT
Content-Type: text/html
...
Transfer-Encoding: chunked
Trailer: Expires
...(报文主体)...
0
Expires: Tue, 28 Sep 2004 23:59:59 GMT

以上示例中,指定首部字段 Trailer 的值为 Expires,在报文主体之后出现了首部字段 Expires

3.6 Transfer-Encoding
Transfer-Encoding.png

首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式

HTTP/1.1 的传输编码方式仅对分块传输编码有效

HTTP/1.1 200 OK
Date: Tue, 03 Jul 2012 04:40:56 GMT
Cache-Control: public, max-age=604800
Content-Type: text/javascript; charset=utf-8
Expires: Tue, 10 Jul 2012 04:40:56 GMT
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Content-Encoding: gzip
Transfer-Encoding: chunked
Connection: keep-alive

cf0 ←16进制(10进制为3312)

...3312字节分块数据...

392 ←16进制(10进制为914)

...914字节分块数据...

0    

以上用例中,在首部字段 Transfer-Encoding 中指定的那样,有效使用分块传输编码,分别被分成 3312 字节和 914 字节大小的分块数据

3.7 Upgrade

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

Upgrade.png

使用首部字段 Upgrade ,还需要额外指定 Connection:upgrade

对应附有首部字段 Upgrade 的请求,服务器可用 101 Switching Protocols 状态码最为响应返回

3.8 Via

使用首部字段 Via 是为了追踪客户端与服务器直接的请求和响应报文的传输路径

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

Via.png
3.9 Warning

该首部通常会告知用户一些与缓存相关的问题的警告

Warning: 113 gw.hackr.jp:8080 "Heuristic expiration" Tue, 03 Jul 2012

格式

Warning: [警告码][警告的主机:端口号]“[警告内容]”([日期时间])

HTTP/1.1 警告码

警告码 警告内容 说明
110 Response is stale(响应已过期) 代理返回已过期的资源
111 Revalidation failed(再验证失败) 代理再验证资源有效性时失败(服务器无法到达等原因)
112 Disconnection operation(断开连接操作) 代理与互联网连接被故意切断
113 Heuristic expiration(试探性过期) 响应的试用期超过 24 小时(有效缓存的设定时间大于 24 小时的情况下)
199 Miscellaneous warning(杂项警告) 任意的警告内容
214 Transformation applied(使用了转换) 代理对内容编码或媒体类型等执行了某些处理
299 Miscellaneous persistent warning(持久杂项警告) 任意的警告内容
上一篇 下一篇

猜你喜欢

热点阅读