HTTP首部字段
HTTP报文首部按类型分为 请求报文和响应首部
报文首部按组成分为 请求/响应首部字段 通用首部字段 实体首部字段
使用首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言,认证信息等内容
首部字段有HTTP/1.1和非HTTP/1.1的区别,后者主要是为了补充,使用频率高,例如cookie
首部字段结构:
首部字段名 : 字段值
例如: Content-Type : text/html
HTTP通用首部报文
Cache-Control
缓存控制
指令 | 参数 | 说明 |
---|---|---|
no-cache | 无 | 防止从缓存中获取过期的资源,客户端不接受缓存过的响应,缓存服务器不能对资源进行缓存 |
no-store | 无 | 一般报文中含有机密信息,规定不能在本地存储请求或响应的任何一部分 |
max-age = [秒] | 必需 | 指定缓存的期限,要与min-fresh区分,这个是在指定时间内都使用有效的缓存资源,超出指定时间就是过期了 |
max-stale (= [秒] ) | 可省略 | 指定客户端愿意接受过期资源的最长时间,哪怕是max-age中过期,但是没有超过max=stale的时间,依旧可以接受具体数字,如果忽略了参数,则无论多久都能接受响应 |
min-fresh = [秒] | 必须 | 指令缓存服务器返回至少未过指定时间的缓存资源,说人话就是希望资源保持新鲜度,在指定时间内希望获得服务器发送的资源,而不是缓存资源 |
no-transform | 无 | 表示代理服务器在传输过程中不得修改响应的内容,一般会进行编码等操作 |
only-if-cached | 无 | 指定客户端只能使用缓存中的响应,而不能向服务器发起请求 |
cache-extension | - | 自定义 |
Connection
控制不再转发给代理的首部字段
Connection : 不再转化的首部字段名
- 控制首部字段的传递:通过
Connection
首部字段,客户端或服务器可以控制哪些首部字段不应该被代理服务器转发。这样可以确保某些敏感信息或特定于原始客户端和服务器之间通信的字段不会被中间代理篡改或修改。 - 优化传输:通过控制传递的首部字段,可以在一定程度上优化传输,避免传输不必要的信息,减少通信开销。
- 控制首部字段的传递:通过
管理持久连接
Connection : close
Connection : Keep-Alive
Date
表名创建HTTP报文的日期和时间
Date: Tue , 03 Jul 2012 04:40:59 GMT
Trailer
用于指定 在响应的尾部(trailer)中包含的额外元数据
- 服务器在发送响应时,在响应头部字段中包含”Trailer”字段,并指定包含在尾部的额外头部字段名称。
- 响应主体传输完毕后,服务器在响应尾部添加额外头部字段,并使用”Trailer”字段指定的字段名称。
- 客户端在接收到响应后,可以通过读取”Trailer”字段来获取额外头部字段的名称。
- 客户端可以根据需要处理这些额外头部字段。
类似于一个补充的作用
HTTP/1.1 200 OK
Content-Type: text / plain
Trailer : My-Header
Hello world
My-Header: Some value
作为一个额外的头部字段,放在实体的后面补充说明
Transfer-Ecoding
规定编码方式
Upgrade
检测HTTP协议以及其他协议是否有更高的版本进行通信
如果Connection的值未Upgrade
产生作用的对象仅限于客户端和邻接服务器之间
Via
最终客户端于服务器之间的传输路径(模糊),一般与Trace一起用
经过代理或网关时会附加该服务器的信息
Warning
警告,具体值查BING吧
请求首部字段
Accept
指定媒体类型和类型的相对优先级(用q=value来表示,中间用 ; 分隔,例如 xml;q=value)
q范围是0~1,默认权重为q=1.0
Accept: text/html,application/xtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Charset
字符集支持 以及 字符集的相对优先顺序
Accept-Charset: iso-8859-5 ,unicode-1-1; q=0.8
Accept-Ecoding
内容编码以及优先级顺序
Accept-language
语言支持 以及 优先级顺序
Accept-Language : zh-cn,zh;q=0.7 , en-us,en; q=0.3
User-Agent
创建请求的浏览器和用户代理名称等信息传达给服务器
User-Agent: Mozilla/5.0(Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
From
客户端告知服务器用户的电子邮箱地址
Host
客户端的主机名和端口号
请求发送服务器的时候,主机名会用IP地址代替域名,但是相同IP可能有多个域名,所以要发主机名
Authorization
用户代理的认证信息(证书值)
Expect
期待值,客户端期望服务器做出行为
IF-… 条件请求
Etag是HTTP协议中的一个实体标签,用于标识资源的特定版本
它通常由服务器分配,随着资源的变化而变化
- If-Match 请求字段值 与 字段Etag值 进行匹配
- If-Modified-Since 如果在指定日期时间后,资源更新,则服务器会接受
- If-None-Match 与1. 相反
- If-Range 请求字段值与 Etag值 进行匹配
- If-Unmodified-Since 与2. 相反
Range
获取部分资源的请求
Range: bytes = 500 - 501
获取第500个字节可是到501个字节的资源
Referer
Referer : URI
查看Referer可以知道请求发起的URI是哪个Web页面
TE
告知服务器:客户端能够处理的编码方式和相对优先级
TE : gzip , deflate;q=0.5
响应首部字段
Accept-Ranges
告知客户端:服务器能允许范围请求,即可以传输部分资源,而不是全部资源
Accept-Ranges : bytes
Age
通常标识 资源在缓存服务器中存储了多长时间
Etag
实体标识
标识资源的版本,随着资源的改变而改变,要与URI区分
强 Etag
无论实体发生什么变化都会改变这个值
弱 Etag
只有发生了根本性变化时才会改变
Location
来提醒客户端页面转移的信息,同上一章见过的3XX结合使用
Proxy-Authenticate
代理服务器所要求的认证信息发送给客户端
Retry-After
告知客户端应该在多久之后再次发送请求
实体首部字段
实体首部字段用于补充内容的更新时间等与实体相关的信息(重点)
Allow
能够支持的方法
Allow : GET, HEAD
Content-Encoding
编码方式
Content-language
资源语言
Content-Length
资源大小
Content-Location
报文主体返回资源对应的URI
Content-MD5
一坨用MD5算法生成的值,用来确认报文主体在传输过程中是否保持完整
Content-Range
范围响应
Content-Type
资源类型
Expires
资源有效期
Last-Modified
最终修改时间
Cookie相关的首部字段
Set-Cookie
响应首部字段
开始状态管理所使用的Cookie信息
属性 | 说明 |
---|---|
NAME=VALUE | Cookie的名称和值 |
expires=DATE | 有效期(不明确就默认浏览器关闭) |
path=PATH | 服务器的文件目录 |
domain=域名 | 适用对象的域名 |
Secure | 仅在HTTPS安全通信时才会发送Cookie |
HttpOnly | 使Cookie不能被JavaScript脚本访问 |
Set-Cookie : status=enable ; expires = Tue,05 Jul 2011 07:26:31 GMT; path=/; domain=google.com
Cookie
请求首部字段
客户端发送给服务端
服务器接收到的Cookie信息
Cookie: status = enable
其他首部字段
保证安全
- X-Frame-Options
- X-XSS-Protection
- DNT
- P3P