HTTP首部字段结构
HTTP首部是由
字段名:字段值构成,中间用冒号分隔
单个字段名可以对应多个值,例如
Keep-Alive:timeount=15,max=100
4种HTTP首部字段类型
1. 通用首部字段:请求和响应都会使用的首部
2. 请求首部字段:客户端发送请求报文时的字段
3. 响应首部字段:服务端向客户端响应报文时的字段
4. 实体首部字段:针对请求和响应报文实体部分使用的字段
端到端首部:会转发给请求/响应的最终接收目标,且规定他必须被转发
逐跳首部:只对单次转发有效,会因通过缓存或代理而不再转发。
属于逐跳首部字段的有(其他都属于端到端首部):
1. Connection
2. Keep-Alive
3. Proxy-Authenticate
4. Proxy-Authorization
5. Trailer
6. TE
7. Transfer-Encoding
8. Upgrade
通用首部字段详解
1. Cache-Control:操作缓存服务器的工作机制
例如:Cache-Control:private,max-age=0,no-cache
缓存请求指令:
指令
|
参数
|
说明
|
no-cache
|
无
|
强制向源服务器再次验证
|
no-store
| 无 |
不缓存请求或相应的任何内容
|
max-age=[秒]
|
必须
|
相应的最大age值
|
max-stale=[秒]
|
可省略
|
接收已过期的响应
|
min-fresh=[秒]
|
必须
|
期望在指定时间内的响应仍有效
|
no-transform
|
无
|
代理不可更改媒体类型
|
only-if-cached
|
无
|
从缓存获取资源
|
cache-extension
|
-
| 新指令标记 |
缓存响应指令
指令 |
参数
|
说明
|
public
|
无
| 可向任意方提供响应的缓存 |
private
|
可省略
| 仅向特定用户返回响应 |
no-cache
|
可省略
|
换存前必须先确认其有效性
|
no-store
|
无
| 不缓存请求或响应的任何内容 |
no-transform
|
无
|
代理不可更改媒体类型
|
must-revalidate
| 无 |
可缓存但必须再向源服务器进行确认
|
max-age=[秒]
| 必须 |
响应的最大age值
|
s-maxage=[秒]
|
必须
|
公共缓存服务器响应的最大age值
|
cache-extension
|
-
|
新指令标记
|
表示能否缓存的指令:
public:其他用户也可利用缓存
private:如武器只对该用户返回缓存,对其他用户不返回
no-cache指令:
防止缓存中返回过期的资源
请求指令中的no-cache:代理服务器直接转发请求到源服务器
响应指令中的no-cache:缓存服务器不能对资源进行缓存,源服务器也不会响应缓存服务器的有效性确认请求
no-store指令:
暗示请求和响应中包含机密信息。
不能在本地存储请求或响应的任一部分
s-maxage指令:
作用同maxage,但只适应于供多为用户使用的公共缓存服务器
maxage指令:
客户端请求中包含maxage小于代理服务器时将直接返回缓存内容,反之发送给源服务器
响应中包含maxage,代理服务器直接缓存不做有效性确认
min-fresh指令:
缓存服务器返回至少还未过指定时间的缓存资源
max-stale指令:
即使过期,只要还在max-stale范围内,客户端都会接收
only-if-cached指令:
只在缓存服务器中寻找有没有缓存资源,如果没有返回504
must-revalidate指令:
强制要求代理向源服务器验证当前缓存有效性,不返回网页内容
强制要求代理向源服务器验证当前缓存有效性,不返回网页内容
proxy-revalidate指令:
强制要求代理向源服务器验证当前缓存有效性,并返回内容
no-transform
无论是在请求还是响应中都不能改变主体的媒体类型
2. Connection
控制不再转发给代理的首部字段
告诉转发服务器不再转发那个字段
管理持久连接
Connection: Keep-Alive是保持长连接
Close服务器想断开链接
2.3. Date
创建http报文的时间
2.4. Pragma
HTTP/1.1之前的遗留字段,
Pragma:no-cache表明客户端不接受代理服务器缓存
2.5 Trailer
Trailer:Expires 在报文主体之后,分块长度0之后还有首部字段Expires
2.6. Transfer-Encoding
指定传输报文主体是采用的编码方式
2.7. Upgrade
检测HTTP及其他协议是否可使用更高版本通信。
2.8. Via
追踪客户端和服务器之间请求和响应报文的传输路径
2.9. Warning
告知用户一些缓存相关问题的警告
3. Accept
告知服务器用户代理能够处理的媒体类型及媒体类型的相对优先级
Accept:text/html,application/xhtml+xml
4. Accept-Charset
通知服务器用户代理支持的字符集
5. Accept-Encoding
内容编码的优先级顺序
6. Accept-Language
客户端能够处理的语言集
7. Authorization
告知服务器用户代理的认证信息(证书值)
8. Expect
告知服务器期望出现的特定行为
9. From
告知服务器用户代理的用户电子邮件地址
10. Host
加host区别在同一物理机上的不同虚拟主机
11. If-Match
只有当if成立时才能执行请求