一、HTTP报文首部
HTTP请求报文,报文首部
- 请求行(方法、URI、HTTP版本)
- 请求首部字段
- 通用首部字段
- 实体首部字段
- 其他
HTTP响应报文,报文首部
- 状态行(HTTP版本、状态码)
- 响应首部字段
- 通用首部字段
- 实体首部字段
- 其他
二.HTTP首部字段
使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容
结构——————首部字段名:字段值
eg:Content-Type:text/html (Content-Type表示报文主体的对象类型)
四种HTTP首部字段类型:
HTTP首部字段一览
通用首部字段
首部字段名 | 说明 |
Cache-Control | 控制缓存的行为 |
Connection | 逐跳首部、链接的管理 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
请求首部字段
首部字段名 | 说明 |
Accept | 用户代理可处理的媒体信息 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言(自然语言) |
Authorization | Web认证信息 |
Expect | 期待服务器的特定行为 |
Form | 用户的电子邮箱地址 |
Host | 请求资源所在服务器 |
If-Match | 比较实体标记(ETag) |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 比较实体标记(与If-Match相反) |
If-Range | 资源未更新时发送实体Byte的范围请求 |
If-Unmodified-Since | 比较资源的更新时间(与If-Modified-Since相反) |
Max-Forwards | 最大传输逐跳数 |
Proxy-Authorization | 代理服务器要求客户端的认证信息 |
Range | 实体的字节范围请求 |
Referer | 对请求中URI的原始获取方 |
TE | 传输编码的优先级 |
User-Agent | HTTP客户端程序的信息 |
响应首部字段
首部字段名 | 说明 |
Accept-Ranges | 是否接受字节范围请求 |
Age | 推算资源创建经过时间 |
ETag | 资源的匹配信息 |
Location | 令客户端重新定向至指定URI |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
Server | HTTP服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenticate | 服务器对客户端的认证信息 |
实体首部字段
首部字段名 | 说明 |
Allow | 资源可支持的HTTP方法 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小(单位:字节) |
Content-Location | 代替对应资源的URI |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的位置类型 |
Expires | 实体主体过期的日期时间 |
Last-Modified | 资源的最后修改日期时间 |
HTTP首部字段将定义成缓存代理和非缓存代理的行为,分成:
- 端到端首部(End-to-end Header) 分到次类别中的首部会转发给请求/响应对应的最终接受目标,且 必须保存在由缓存生成的响应中,必须被转发
除逐跳首部字段外其他字段
- 逐跳首部(Hop-by-hop Header) 分在此类别的首部支队单次转发有效,会因缓存或代理而不再转发
包括Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade
三、HTTP/1.1 通用首部字段
1.Chache-Control:能够控制缓存的行为
- Chache-Control:no-cache 客户端不接受缓存过的信息,伪雷防止缓存中返回国企的资源
- Chache-Control:no-store 不进行缓存,按时请求或响应中包含机密信息
- Chache-Control:max-age=604800(单位:秒) 一定时间内不必再确认缓存是否过期
- Chache-Control:min-fresh=60() 要求缓存服务器返回至少还未超过指定时间的缓存资源,否则即使有效也不用
- Chache-Control:max-stale=3600()可指示缓存资源,过期照收
- Chache-Control:only-if-chached 客户端尽在缓存服务器本地缓存目标的资源情况也才要求返回
- Chache-Control:must-revalidate 代理向元服务器再次验证即将返回的响应缓存目前是否仍然有效,会忽略max-stale指令
- Chache-Control:proxy-revalidate 返回响应之前再次验证缓存的有效性
- Chache-Control:no-transform 无论在请求还是响应中,缓存都不能改变实体主体的媒体类型
2.Connection
作用:1.控制不再转发给代理的首部字段
Connection:不再转发的字段名
2.管理持久连接
默认持久连接,服务器想断开时 Connection:close
请求/响应持久连接 Connectionn:Keep-Alive
3.Date 表明创建HTTP报文的日期和时间
Date: Tue,03 Jul 2012 04:40:59 GMT
4.Pragram
Pragram:no-chache 属于通用首部字段,但只用于请求中。客户端会要求所有的中间服务器不返回缓存的资源,与Chache-Control:no-cache 可一起使用
5.Trailer 事先说明在报文主体后记录了哪些首部字段
6.Transfer-Encoding 规定传输报文时报文主体用编码方式
7.Upgrade 用于检测HTTP协议及其他协议是否可使用更高级的版本进行通信,其参数值可以指定一个完全不同的通信协议,使用时,需额外指定 Connection:Upgrade
8.Via 追踪客户端与服务器之间的请求和响应报文的传输路径 可以避免请求回环的发生,在经过代理时必须附加
各个代理服务器会往Via首部添加自身服务器信息
9.Warning 告知客户一些于换成相关的问题的警告
四、请求首部字段
1.Accept 通知服务器用户代理能够处理的媒体类型以及相对优先级
Accept:text/html,application/xhtml+xml;q=0.9,*/*;q=0.8
q= 表示权重,分号隔开
- 文本文件:text/html,text/plain,text/css... application/xhtml+xml,application/xml....
- 图片文件:image/jpeg,image/jif,image/png...
- 视频文件:video/mpeg,video/quicktime...
- 应用程序使用的二进制文件:application/octet-stream,application/zip...
2.Accept-Charset 通知服务器用户代理支持的字符集以及优先顺序
Accept-Charset:iso-8859-5,unicode-1-1;q=0.8
3.Accept-Encoding:告知服务器用户代理支持的内容编码以及优先顺序(q=)
内容编码的例子
- gzip 文件压缩程序生产的编码格式
- compress UNIX文件压缩程序生产的
- deflate zlib格式以及deflate压缩算法生产的编码格式
- identity 不执行压缩或者不会变化的默认编码格式
4.Accept-Language:zh-cn,zh;q=0.7,en-us,en;q=0.3
5.Authorization 告知服务器用户代理的认证信息
6.Expect 客户端告知服务器期望出现的某种特点行为
7.Form:info@hackr.jp 告知服务器使用用户代理的电子邮件地址
8.Host 告知服务器请求的资源所处的互联网主机名和端口号,必须包含
Host:www.hackr.jp
9.If-Match:"123456" 条件请求 与实体标记(ETag)值相同时,服务器接收请求
10.If-Modified-Since 告知若字段值早于更新时间,则希望处理该请求 用于确认代理或客户端拥有的本地资源的有效性
11.If-None-Match 与ETag值不一致时,处理请求
12.If-Range 与ETag值或时间 一致 处理
13.If-Unmodified-Since 告知若字段值在指定日期之后,则处理该请求
14.Max-Forwards 服务器在往下一个服务器转发请求之前,将Max-Forwards值-1后重新赋值
15.Proxy-Authorization 告知服务器认证所需要的信息
16.Range:bytes=5001-10000 范围请求
17.Referer:http://www.hackr.jp/index.htm 告知服务器请求的原始资源的URI
18.TE 告知服务器客户端能够处理响应的传输编码方式以及相对优先级
19.User-Agent 用于传达浏览器的种类 将创建请求的浏览器和用户名等信息传送给服务器
五、响应首部字段
1.Accept-Ranges告知客户端服务器是否能处理范围请求,一指定获取服务器端某个部分的资源
可处理 bytes 反之 none
2.Age:600 告知客户端,源服务器在多久之前创建了响应
3.ETag:“13216546” 告知客户端实体标识 为每份资源分配ETag值
强Etag值,细微变化改变
弱ETag值,根本资源改变才变
4.Location 将响应接收方引导至与某个请求URI位置不同的资源
5.Proxy-Authenticate 把由代理服务器所要求的认证信息发送给客户端
6.Retry-After:120 告知客户端应在多久之后再次发送请求 字段值可以说具体日期时间,也可以是创建相应后的秒数
7.Server 告知客户端当前服务器上安装的HTTP服务器应用程序的信息
8.Vary:Accept-Language 可对缓存进行控制。源服务器会向代理服务器传达关于本地缓存使用方法的命令
9.WWW-Authenticate 用于HTTP访问认证
六、实体首部字段
1.Allow:GET,HEAD 通知客户端能够支持指定资源的所以HTTP方法
2.Content-Encoding :gzip 告知客户端服务器对实体的主体部分选用的内容编码方式
3.Content-Language:zh-CN 告知客户端,实体主体使用的自然语言
4.Content-Length:15000 表明了实体主体部分大小(字节)
5.Content-Location:HTTP://。。。。。。。 给出与报文主体部分相对应的URI
6.Content-MD5 客户端会对接受的报文主体执行相同的MD5算法,然后与首部字段的Content-MD5的字段值进行比较
7.Content-Range:bytes 5001-10000/10000 告知客户端最为响应返回的实体的哪个部分符合范围请求
8.Content-Type 说明了实体主体内对象的媒体类型
9.Expires 将资源失效日期告知客户端
10.Last-Modified 指明资源最终修改时间
七、为Cookie服务的首部字段
Cookie工作机制时用户识别以及状态管理
与Cookie有关的首部字段:
- Set-Cookie 开始状态管理所使用的Cookie信息 属于响应首部字段
属性
属性 | 说明 |
NAME=VALUE | 赋予Cookie的名称和其值(必须项) |
expires=DATE | Cookie的有效期(默认 浏览器关闭前为止) |
path=PATH | 将服务器上的文件目录作为Cookie的适用对象 |
domain=域名 | 作为Cookie适用对象的域名 |
Secure | 仅在HTTPS安全通信时才会发送Cookie |
HttpOnly | 加以限制,使Cookie不能被JavaScript脚本访问 |
- Cookie
Cookie:status=enable 告知服务器当客户端想获得HTTP状态管理支持时,就会在请求中包括从服务器接收到的Cookie
八、其他首部字段
常用:
- X-Frame-Options 控制网站内容在其他Web网站的Frame标签内显示,防止点击劫持攻击
DENY 拒绝 SAMEORIGIN 仅同源域名下的页面许可
- X-XSS-Protection 响应首部 针对跨站脚本攻击(XSS)的对策
0:将XSS过滤设置成无效状态
1:....有效状态
- DNT 请求首部 拒绝被精准广告追踪
0:同意被追踪
1:拒绝被追踪
- P3P 响应首部 利用P3P(在线隐私偏好平台)让Web网站上的个人隐私变成仅供程序理解的形式