1. 报文首部
首部:在客户端和服务器处理时起重要作用的信息几乎都在这边
主体:所需要的用户和资源的信息都在这边
1.1 HTTP请求报文
- 请求行:方法、URI、HTTP版本
- 请求头:首部字段(请求首部字段、通用首部字段、实体首部字段)
- 请求体:发送的数据
1.2 HTTP响应报文
- 响应行:HTTP版本号、状态码
- 响应头:响应首部字段、通用首部字段、实体首部字段
- 响应头:响应的数据
2. 首部字段
HTTP 首部字段是构成 HTTP 报文的要素之一。它是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
2.1 首部字段的结构
首部字段由首部字段名和字段值构成的,中间用冒号分开。例如:
Content-Type: text/html
另外,字段值对应的单个HTTP首部字段可以有多个值。例如:
Keep-Alive: timeout=15,max=100
2.2 四种HTTP首部字段类型
HTTP首部根据实际用途被分为四个类型:
- 通用首部字段:请求报文和响应报文两方都会使用的首部。
- 请求首部字段:从客户端发送请求报文时的首部,主要是补充了请求的附加内容,客户端信息等。
- 响应首部字段:从服务器向客户端返回响应报文时使用的首部,主要是补充响应的附加内容。
- 实体首部字段:针对请求报文和响应报文的实体使用的首部。
2.3 End-to-end 首部和 Hop-by-hop 首部
HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成 2 种类型。
-
端到端首部(End-to-end Header):分在此类别中的首部会转发给请求 / 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发
-
逐跳首部(Hop-by-hop Header):分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。
3. HTTP/1.1 通用首部字段
3.1 Cache-Control
首部字段 Cache-Control 能够控制缓存的行为,可用于请求及响应时。
-
public:表明其他用户也可利用缓存
-
private:响应只以特定的用户作为对象,对于其他用户发送过来的请求,代理服务器则不会返回缓存。
-
no-cache 指令 目的是为了防止从缓存中返回过期的资源。
客户端发送的请求中如果包含 no-cache 指令,则表示客户端将不会接收缓存过的响应。
如果服务器返回的响应中包含 no-cache 指令,那么缓存服务器不能对资源进行缓存。
由服务器返回的响应中,若报文首部字段 Cache-Control 中对 no-cache字段名具体指定参数值,那么客户端在接收到这个被指定参数值的首部字段对应的响应报文后,就不能使用缓存。无参数值的首部字段可以使用缓存。只能在响应指令中指定该参数。
-
no-store 指令
暗示请求(和对应的响应)或响应中包含
机密信息,规定缓存不能在本地存储请求或响应的任一部分。事实上 no-cache 代表不缓存过期的资源,no-store 才是真正地不进行缓存。
-
s-maxage 指令
s-maxage 指令的功能和 max-age 指令的相同,它们的不同点是 s-maxage 指令只适用于供多位用户使用的公共缓存服务器 。
也就是说,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。
另外,当使用 s-m