一、请求首部字段
请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。
二、Accept(媒体类型)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
(1)Accept首部字段可通知服务器,用户代理能能够处理的媒体类型及媒体类型的相对优先级。
(2)可使用type/subtype这种形式,一次指定多种媒体类型。
(3)媒体类型
文本文件
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 ...
(4)若想要给显示的媒体类型增加优先级,则使用q=来额外表示权重值,用分号(;)进行分隔。权重值q的范围是0-1(可精确到小数点后3位),且1为最大值。不指定权重q值时,默认权重为q=1.0。
(5)当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。
三、Accept-Charset(字符集)
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
(1)Accept-Charset首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。
(2)可一次性指定多种字符集。
(3)与首部字段Accept相同的是可用权重q值来表示相对优先级。
(4)该首部字段应用于内容协商机制的服务器驱动协商。
四、Accept-Encoding(内容编码)
Accept-Encoding: gzip, deflate
(1)Accept-Encoding首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
(2)可一次性指定多种内容编码。
(3)内容编码
gzip
由文件压缩程序 gzip(GNU zip)生成的编码格式 (RFC1952),采用 Lempel-Ziv 算法(LZ77)及 32 位循环冗余校验(Cyclic Redundancy Check,通称 CRC)。
compress
由 UNIX 文件压缩程序 compress 生成的编码格式,采用 Lempel- Ziv-Welch 算法(LZW)。
deflate
组合使用 zlib 格式(RFC1950)及由 deflate 压缩算法(RFC1951)生成的编码格式。
identity
不执行压缩或不会变化的默认编码格式
(4)采用权重q值来表示相对优先级。
(5)可使用星号(*)作为通配符,指定任意的编码格式。
五、Accept-Language(自然语言)
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
(1)首部字段Accept-Language用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级。
(2)可一次指定多种自然语言集。
(3)按权重值q来表示相对优先级。
六、Authorization(认证信息)
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==
(1)首部字段Authorization是用来告知服务器,用户代理的认证信息(认证值)。
(2)通常,想要通过服务器认证的用户代理会在接受都返回的401状态码响应后,把首部字段Authorization加入请求中。
(3)共用缓存再接受到含有Authorization首部字段的请求时的操作处理会略有差异。
七、Expect(期望)
Expect: 100-continue
(1)客户端使用首部字段Expect来告知服务器,期望出现的某种特定行为。
(2)因服务器无法理解客户端的期望作出回应而发生错误时,会返回状态码417 Expectation Failed。
(3)客户端可以利用该首部字段,写明所期望的扩展。虽然HTTP/1.1规范只定义了100-continue(状态码100 Continue之意)。
(4)等待状态码100响应的客户端再发生请求时,需要指定Expect: 100-continue 。
八、From(电子邮件地址)
(1)首部字段From用来告知服务器使用用户代理的用户的电子邮件地址。
(2)其使用目的就是为了显示搜索引擎等用户代理的负责人的电子邮件联系方式。
(3)使用代理时,应尽可能包含From首部字段(但可能因代理不同,将电子邮件地址记录再User-Agent首部字段内)。
九、Host(主机名和端口号)
Host: www.hackr.jp
(1)首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号。
(2)Host首部字段再HTTP/1.1规范内是唯一一个必须包含在请求内的首部字段。
(3)若服务器未设定主机名,那直接发送一个空值即可。
Host:
十、If-Match(匹配资源所用的实体标记(ETag)值,一致处理请求)
(1)形如If-xxx这种样式的请求首部字段,都可称为条件请求。
(2)服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
If-Match: "123456"
(3)首部字段If-Match,属附带条件之一,它会告知服务器匹配资源所用的实体标记(ETag)值。这时的服务器无法使用弱ETag值。
(4)服务器会比对If-Match的字段值和资源的ETage值,仅当两者一致时,才会执行请求。反之,则返回状态码412 Precondition Failed的响应。
(5)可以使用星号(*)指定If-Match的字段值。针对这种情况,服务器将会忽略ETag的值,只要资源存在就处理请求。
十一、If-Modified-Since(确认代理或客户但拥有的本地资源的有效性,发生更新的情况下,才能处理请求)
If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT
(1)首部字段If-Modified-Since,属附带条件之一,它会告知服务器若If-Modified-Since字段值早于资源的更新时间,则希望能处理该请求。
(2)在指定If-Modified-Since字段值的日期时间之后,如果请求的资源都没有过更新,则返回状态吗304 Not Modified的响应。
(3)If-Modified-Since用于确认代理或客户但拥有的本地资源的有效性。
(4)获取资源的更新日期时间,可通过确认首部字段Last-Modified来确定。
十二、If-None-Match(匹配资源所用的实体标记(ETag)值,不一致处理请求)
(1)首部字段If-None-Match属于附带条件之一。它和首部字段If-Match作用相反。
(2)用于指定If-None-Match字段值的实体标记(ETag)值与请求资源的ETag不一致时,它就告知服务器处理该请求。
十三、If-Range(匹配资源所用的实体标记(ETag)值,一致则作为范围请求)
(1)首部字段If-Range属于附带条件之一。
(2)它告知服务器若指定的If-Range字段值(ETag值或者时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之,则返回全体资源。
(3)不使用首部字段If-Range发送请求的情况。服务器端的资源如果更新,那客户端持有资源中的一部分也会随之无效,当然,范围请求作为前提是无效的。这时,服务器会暂且以状态码 412 Precondition Failed 作为响应返回,其目的是催促客户端再次发送请求。这样一来,与使用首部字段 If-Range 比起来,就需要花费两倍的功夫。
十四、If-Unmodified-Since(未发生更新的情况下,才能处理请求)
If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT
(1)首部字段If-Unmodified-Since和首部字段If-Modified-Since的作用相反。
(2)它的作用是告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。如果在指定日期时间后发生了更新,则以状态吗412 Precondition Failed作为响应返回。
十五、Max-Forwards(可经过的服务器最大数目)
Max-Forwards: 10
(1)通过TRACE方法或OPTION方法,发送包含首部字段Max-Forwards的请求时,该字段以十进制整数型形式指定可经过的服务器最大数目。
(2)服务器在往下一个服务器转发请求之前,Max-Forwards的值减1后重新赋值。当服务器接受到Max-Forwards值为0的请求时。则不再进行转发,而是直接返回响应。
(3)使用 HTTP 协议通信时,请求可能会经过代理等多台服务器。途中, 如果代理服务器由于某些原因导致请求转发失败,客户端也就等不到服务器返回的响应了。对此,我们无从可知。
(4)可以灵活使用首部字段 Max-Forwards,针对以上问题产生的原因展 开调查。由于当 Max-Forwards 字段值为 0 时,服务器就会立即返回 响应,由此我们至少可以对以那台服务器为终点的传输路径的通信状况有所把握。
十六、Proxy-Authorization(认证行为发生在客户端与代理之间,以告知服务器认证所需要的信息)
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5
(1)接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。
(2)这个行为是与客户端和服务器之间的HTTP访问认证类似的。不同之处在于,认证行为发生再客户端与代理之间。客户端与服务器之间的认证,使用首部字段Authorization可起到相同作用。
十七、Range(告知服务器资源的指定范围)
Range: bytes=5001-10000
(1)对于只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围。
(2)接收到附带Range首部字段请求的服务器,会在处理请求之后返回状态码为206 Partial Content的响应。
(3)无法处理该防卫请求时,则会返回状态吗200 OK的响应及全部资源。
十八、Referer(请求的原始资源的URI)
Referer: http://www.hackr.jp/index.htm
(1)首部字段Referer会告知服务器请求的原始资源的URI。
(2)客户端一般都会发送Referer首部字段给服务器。但当直接在浏览器的地址栏输入URI,或处于安全性的考虑时,也可以不发送该首部字段。因为原始资源的 URI 中的查询字符串可能含有 ID 和密码等保密信息,要是写进 Referer 转发给其他服务器,则有可能导致保密信息的泄露。
(3)另外,Referer 的正确的拼写应该是 Referrer,但不知为何,大家一直沿用这个错误的拼写。
十九、TE(传输编码方式)
TE: gzip, deflate;q=0.5
(1)首部字段TE会告知服务器客户端能够处理响应的传输编码方式及相对优先级。它和首部字段Accept-Encoding的功能很相像,但是用于传输编码。
(2)首部字段TE除指定传输编码之外,还可以指定伴随trailer字段的分块传输编码的方式。应用后者时,只需把trailers赋值给该字段值。
TE: trailers
二十、User-Agent(浏览器和用户代理名称等信息)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/ =>20100101 Firefox/13.0.1
(1)首部字段User-Agent将创建请求的浏览器和用户代理名称等信息传达给服务器。
(2)由网络爬虫发起请求时,由可能会在字段内添加爬虫作者的电子邮件地址。此外,如果请求经过代理,那么中间也很可能被添加上代理服务器的名称。