《图解HTTP》HTTP首部(2)
四、请求首部字段
请求首部字段是由客户端往服务器端发送请求报文汇总使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容
1、Accept
Accept用于通知服务器,用户代理能够处理的媒体类型和媒体类型的优先级
可以使用type/subtype这种形式,一次指定多种媒体类型
下面是几种常见的媒体类型:
- 文本文件
text/html,text/plain,text/css...
application/xhtml+xml,application/xml...
- 图片文件
image/jpeg, image/gif, image/png
- 视频文件
video/mpeg, video/quicktime
- 应用程序使用的二进制文件
application/octet-stream,application/zip...
给媒体类型增加优先级:
可以使用q=来额外表示权重值,用分号(;)进行分隔。
权重q的范围是0~1,且1是最大值。不指定权重q值时,默认权重q=1.0
当服务器可以提供多种内容时,会首先返回权重值最高的媒体类型
2、Accept-Charset
通知服务器,用户代理支持的字符集和字符集的优先顺序,应用于内容协商机制的服务器驱动协商
3、Accept-Encoding
通知服务器,代理的内容编码以及内容编码的优先顺序。另外也使用*作为通用符,指定任意的编码格式
几种内容编码的例子:
- gzip
- cpmpress
- deflate
- identity
4、Accept-Language
通知服务器和代理能够处理的自然语言(中文或英文) 以及自然语言的优先级
5、Authorization
通知服务器和代理的认证信息,通常会先返回401响应,然后客户端在输入认证信息,浏览器将首部字段Authorization字段加入报文重新发给服务器。
6、Expect
告诉服务器期望出现的某种特定的行为,如果服务器无法理解客户端的期望,会返回状态码417 Expectation Failed。HTTP/1.1规定只定义了100-continue。(客户端可以利用Expect写明所期望的扩展)
7、From
告诉服务器使用用户代理的用户的电子邮件地址。
目的:显示代理用户的电子邮件联系方式。
使用代理时,应尽可能包含From首部字段(因代理不同,电子邮箱地址可能记录在User-Agent首部字段)
8、Host
虚拟主机运行在同一个ip上,因此用Host区分
Host字段是唯一一个HTTP/1.1规定必须被包含在请求头内的首部字段
首部字段会告诉服务器请求的资源所处的互联网主机名和端口号(当服务器未设置主机名时,直接发送一个空值)
9、If-match
条件请求:使用首部 If-xxx 发出的请求。
当服务器接收条件请求时,只有条件为真才会执行请求。
只有If-matche的字段和Etag的值一致时,服务器才接受,否则412 Precondition Failed
10、If-Modified-Since
在If-modify-Since字段指定的时间之后资源更新,服务器会接受请求,否则返回304 Not Modified
11、If-None-Match
If-None-Match字段和Etag值不一样时,可处理该请求
12、If-Range
指定的If-Range字段值和请求资源一致时,会请求处理,反之返回全体资源。
若不适用If-Range字段,服务器会返回304,然后客户端再发请求,服务器才会返回全体资源。
13、 If-Unmodified-Since
在If-Unmodify-Since字段指定的时间之内资源更新,服务器会接受请求,否则返回412 Precondition Failed
14、Max-Forwards
经过的服务器最大数目。,每经过一个服务器减1,当Max-Forward减到0时,请求不在转发,直接返回响应。
作用:可以了解以返回的那台服务器为终点,所经过的服务器通信情况。避免由于服务器转发失败导致客户端没有响应。
15、Proxy-Authorization
发生在客户端与代理服务器之间的认证质询,与Authorzation认证字段相似(客户端与服务器之间的认证质询)。
16、Range
获取部分资源的范围请求。若可以处理,返回206 PratialContent,若不能处理,返回200及全部资源。
17、Referfer
告知服务器请求的原始资源的URL
18、TE
告知服务器客户端能够处理响应的传输编码方式以及相应优先级,与Accept-Ecoding功能类似,但是只用于传输编码。
19、User-Agent
会将创建请求的浏览器和用户代理名称等信息传达给服务器
五、响应首部字段
1、Accept-Ranges
告诉客户端是否能处理范围请求,获取服务器某部分的资源。可以处理返回byte,不能处理返回none
2、Age
告诉客户端,服务器在多久前创建了响应
3、Etage
告知客户端实体标识
强Etage:无论实体发生多么细微的变化都会改变其值
弱Etage:提示资源是否相同,只有资源发生根本改变,才会改变其值。在最开始附加W/
4、Location
将响应接收方引导至某个请求URI位置不同的资源
浏览器接收这个字段后会强制性地尝试访问重定向资源
5、Proxy-Authenticate
把代理服务器所要求的的认证信息发送给客户端
6、Retry-After
告诉客户端多久后再次发请求
7、Server
告知客户端当前服务器上安装的HTTP服务器应用层程序的信息。可能包括软件应用名称、版本号和安装时启动的可选项。
8、Vary
Vary可对缓存进行控制,用于源服务器向代理服务器传达关于本地缓存使用方法的命令。
当代理服务器收到Vary首部字段指定获取资源的请求时,若Accept-Langusge请求值相同时,直接从缓存读取响应,否则先从源服务端获取资源后才能作为响应返回。
9、WWW-Authenticate
用于HTTP访问认证
六、实体首部字段
1、Allow
通知客户端,它能够支持的HTTP方法。若服务器不支持HTTP,则返回405 Method Not Allowed并把所支持的方法写入Allow
2、Content-Enconding
告知客户端对实体部分内容编码方式
3、Content-Language
告诉客户端主体使用的自然语言
4、Content-Length
表明实体主体部分的大小
5、Content-Location
报文主体返回资源对应的URI
6、Content-MD5
是一串由MD5算法生成的值,用于检查主体在传输过程中是否保存完整,以及确认传输到达。
7、Content-Range
告知客户端作为响应返回的实体的哪个部分范围请求。字段值以字节为单位,表示当前发送部分及整个实体大小
8、Content-Type
实体主体内对象的媒体类型
9、Epires
将资源失效的日期告知客户端。缓存服务器在接收到含有Expires的响应后,会以缓存响应请求。
10、Last-Modified
资源最后被修改的时间
七、为Cookie服务的首部字段
Cookies的工作机制是用户识别及状态管理
将cookies临时写入计算机,调用cookies时验证,有效期、域、路径、协议等内容
1、Set-Cookie
expires属性:浏览器可发送cookies的有效期。当expries省略,应用程序关闭cookies失效。cookies不能删除,只能覆盖
path属性:指定cookies发送范围的文件目录
domain属性:通过cookies指定域名。不指定domain属性更安全。
secure属性:限制Web页面仅在HTTPS安全连接时,才可以发送cookies。
Set-Cookie:name=vale;secure
HttpOnly属性:使js脚本无法获取cookies,防止XSS对cookies的信息窃取
Set-Cookie:name=value;HttpOnly
2、Cookie
cookie:status=enable
请求中包含从服务器收到的cookie,可以是多个
八、其他首部字段
1、X-Frame-Options
控制网站内容在其他web网站的frame标签的显示问题
X-Frame-Options:DENY (拒绝)
X-Frame-Options:SAMEORIGN (允许源域名下的页面匹配)
2、X-XSS-Protection
是针对跨站脚本攻击的一种对策,控制浏览器XSS防护机制的开关
0:将XSS过滤设置成无效状态
1:将XSS过滤设置成有效状态
3、DNT
拒绝个人信息被收集,拒绝被精准广告追踪
0:统一被追踪
1:拒绝被追踪
4、P3P
目的:保护用户隐私