图解HTTP--笔记4

请求首部字段

请求首部字段是从客户端往服务器端发送请求报文中所使用的字段, 用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。 

Accept : Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体 类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒 体类型。 若想要给显示的媒体类型增加优先级,则使用 q= 来额外表示权重值 1,用分号(;)进行分隔。权重值 q 的范围是 0~1(可精确到小数点 后 3 位),且 1 为最大值。不指定权重 q 值时,默认权重为 q=1.0。 当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。 

Accept-Charset : Accept-Charset 首部字段可用来通知服务器用户代理支持的字符集及 字符集的相对优先顺序。另外,可一次性指定多种字符集。与首部字 段 Accept 相同的是可用权重 q 值来表示相对优先级。 该首部字段应用于内容协商机制的服务器驱动协商。 

Accept-Encoding : Accept-Encoding 首部字段用来告知服务器用户代理支持的内容编码及 内容编码的优先级顺序。可一次性指定多种内容编码。 gzip 、 compress 、 deflate 、 identity。 不执行压缩或不会变化的默认编码格式 采用权重 q 值来表示相对优先级,这点与首部字段 Accept 相同。另 外,也可使用星号(*)作为通配符,指定任意的编码格式。 

Accept-Language : 首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然 语言集(指中文或英文等),以及自然语言集的相对优先级。可一次 指定多种自然语言集。 和 Accept 首部字段一样,按权重值 q 来表示相对优先级。在上述图 例中,客户端在服务器有中文版资源的情况下,会请求其返回中文版 对应的响应,没有中文版时,则请求返回英文版响应。 

Authorization : 首部字段 Authorization 是用来告知服务器,用户代理的认证信息(证 书值)。通常,想要通过服务器认证的用户代理会在接收到返回的 401 状态码响应后,把首部字段 Authorization 加入请求中。共用缓存 在接收到含有 Authorization 首部字段的请求时的操作处理会略有差 异。 

Expect : 客户端使用首部字段 Expect 来告知服务器,期望出现的某种特定行 为。因服务器无法理解客户端的期望作出回应而发生错误时,会返回 状态码 417 Expectation Failed。 客户端可以利用该首部字段,写明所期望的扩展。虽然 HTTP/1.1 规 范只定义了 100-continue(状态码 100 Continue 之意)。 等待状态码 100 响应的客户端在发生请求时,需要指定 Expect:100- continue。 

From : 首部字段 From 用来告知服务器使用用户代理的用户的电子邮件地 址。通常,其使用目的就是为了显示搜索引擎等用户代理的负责人的 电子邮件联系方式。使用代理时,应尽可能包含 From 首部字段(但 可能会因代理不同,将电子邮件地址记录在 User-Agent 首部字段 内)。 

Host : 首部字段 Host 会告知服务器,请求的资源所处的互联网主机名和端 口号。Host 首部字段在 HTTP/1.1 规范内是唯一一个必须被包含在请 求内的首部字段。 首部字段 Host 和以单台服务器分配多个域名的虚拟主机的工作机制 有很密切的关联,这是首部字段 Host 必须存在的意义。 请求被发送至服务器时,请求中的主机名会用 IP 地址直接替换解 决。但如果这时,相同的 IP 地址下部署运行着多个域名,那么服务 器就会无法理解究竟是哪个域名对应的请求。因此,就需要使用首部 字段 Host 来明确指出请求的主机名。若服务器未设定主机名,那直 接发送一个空值即可。

If-Modified-Since : 首部字段 If-Modified-Since,属附带条件之一,它会告知服务器若 IfModified-Since 字段值早于资源的更新时间,则希望能处理该请求。 而在指定 If-Modified-Since 字段值的日期时间之后,如果请求的资源 都没有过更新,则返回状态码 304 Not Modified 的响应。 If-Modified-Since 用于确认代理或客户端拥有的本地资源的有效性。 获取资源的更新日期时间,可通过确认首部字段 Last-Modified 来确定。

If-None-Match : 首部字段 If-None-Match 属于附带条件之一。它和首部字段 If-Match 作用相反。用于指定 If-None-Match 字段值的实体标记(ETag)值与 请求资源的 ETag 不一致时,它就告知服务器处理该请求。 在 GET 或 HEAD 方法中使用首部字段 If-None-Match 可获取最新的资 源。因此,这与使用首部字段 If-Modified-Since 时有些类似。

If-Range : 首部字段 If-Range 属于附带条件之一。它告知服务器若指定的 IfRange 字段值(ETag 值或者时间)和请求资源的 ETag 值或时间相一 致时,则作为范围请求处理。反之,则返回全体资源。 下面我们思考一下不使用首部字段 If-Range 发送请求的情况。服务器 端的资源如果更新,那客户端持有资源中的一部分也会随之无效,当 然,范围请求作为前提是无效的。这时,服务器会暂且以状态码 412 Precondition Failed 作为响应返回,其目的是催促客户端再次发送请 求。这样一来,与使用首部字段 If-Range 比起来,就需要花费两倍的 功夫。

If-Unmodified-Since : 首部字段 If-Unmodified-Since 和首部字段 If-Modified-Since 的作用相 反。它的作用的是告知服务器,指定的请求资源只有在字段值内指定 的日期时间之后,未发生更新的情况下,才能处理请求。如果在指定 日期时间后发生了更新,则以状态码 412 Precondition Failed 作为响应 返回。

Max-Forwards : 通过 TRACE 方法或 OPTIONS 方法,发送包含首部字段 MaxForwards 的请求时,该字段以十进制整数形式指定可经过的服务器最 大数目。服务器在往下一个服务器转发请求之前,Max-Forwards 的 值减 1 后重新赋值。当服务器接收到 Max-Forwards 值为 0 的请求 时,则不再进行转发,而是直接返回响应。 使用 HTTP 协议通信时,请求可能会经过代理等多台服务器。途中, 如果代理服务器由于某些原因导致请求转发失败,客户端也就等不到 服务器返回的响应了。对此,我们无从可知。 可以灵活使用首部字段 Max-Forwards,针对以上问题产生的原因展 开调查。由于当 Max-Forwards 字段值为 0 时,服务器就会立即返回 响应,由此我们至少可以对以那台服务器为终点的传输路径的通信状 况有所把握。

Proxy-Authorization : 接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段 Proxy-Authorization 的请求,以告知服务器认证所需要的信息。 这个行为是与客户端和服务器之间的 HTTP 访问认证相类似的,不同 之处在于,认证行为发生在客户端与代理之间。客户端与服务器之间 的认证,使用首部字段 Authorization 可起到相同作用。

Range : 对于只需获取部分资源的范围请求,包含首部字段 Range 即可告知服 务器资源的指定范围。上面的示例表示请求获取从第 5001 字节至第 10000 字节的资源。 接收到附带 Range 首部字段请求的服务器,会在处理请求之后返回状 态码为 206 Partial Content 的响应。无法处理该范围请求时,则会返 回状态码 200 OK 的响应及全部资源。

Referer : 客户端一般都会发送 Referer 首部字段给服务器。但当直接在浏览器 的地址栏输入 URI,或出于安全性的考虑时,也可以不发送该首部字 段。 因为原始资源的 URI 中的查询字符串可能含有 ID 和密码等保密信 息,要是写进 Referer 转发给其他服务器,则有可能导致保密信息的 泄露。 另外,Referer 的正确的拼写应该是 Referrer,但不知为何,大家一直 沿用这个错误的拼写。

TE : 首部字段 TE 会告知服务器客户端能够处理响应的传输编码方式及相 对优先级。它和首部字段 Accept-Encoding 的功能很相像,但是用于 传输编码。 首部字段 TE 除指定传输编码之外,还可以指定伴随 trailer 字段的分 块传输编码的方式。应用后者时,只需把 trailers 赋值给该字段值。

User-Agent : 首部字段 User-Agent 会将创建请求的浏览器和用户代理名称等信息传 达给服务器。 由网络爬虫发起请求时,有可能会在字段内添加爬虫作者的电子邮件 地址。此外,如果请求经过代理,那么中间也很可能被添加上代理服 务器的名称。

 Accept 首部字段
 Accept-Charset 首部字段
 Accept-Encoding 首部字段
首部字段 Authorization
首部字段 Expect 
首部字段 From 
 首部字段 Host
 If-Modified-Since
首部字段 If-None-Match
If-Range 
If-Range 
Max-Forwards
Max-Forwards
Max-Forwards
首部字段 Referer
首部字段 User-Agent

响应首部字段

响应首部字段是由服务器端向客户端返回响应报文中所使用的字段, 用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等 信息。

Accept-Ranges : 首部字段 Accept-Ranges 是用来告知客户端服务器是否能处理范围请 求,以指定获取服务器端某个部分的资源。 可指定的字段值有两种,可处理范围请求时指定其为 bytes,反之则 指定其为 none。

Age : 首部字段 Age 能告知客户端,源服务器在多久前创建了响应。字段值 的单位为秒。 若创建该响应的服务器是缓存服务器,Age 值是指缓存后的响应再次 发起认证到认证完成的时间值。代理创建响应时必须加上首部字段 Age。

ETag : 首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符串 形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag 值。 另外,当资源更新时,ETag 值也需要更新。生成 ETag 值时,并没有 统一的算法规则,而仅仅是由服务器来分配。 资源被缓存时,就会被分配唯一性标识。例如,当使用中文版的浏览 器访问 http://www.google.com/ 时,就会返回中文版对应的资源,而 使用英文版的浏览器访问时,则会返回英文版对应的资源。两者的 URI 是相同的,所以仅凭 URI 指定缓存的资源是相当困难的。若在下 载过程中出现连接中断、再连接的情况,都会依照 ETag 值来指定资 源。 ETag 中有强 ETag 值和弱 ETag 值之分。 强 ETag 值,不论实体发生多么细微的变化都会改变其值。 弱 ETag 值只用于提示资源是否相同。只有资源发生了根本改变,产 生差异时才会改变 ETag 值。这时,会在字段值最开始处附加 W/。

Location : 使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置 不同的资源。 基本上,该字段会配合 3xx :Redirection 的响应,提供重定向的 URI。 几乎所有的浏览器在接收到包含首部字段 Location 的响应后,都会强 制性地尝试对已提示的重定向资源的访问。

Proxy-Authenticate : 首部字段 Proxy-Authenticate 会把由代理服务器所要求的认证信息发送 给客户端。 它与客户端和服务器之间的 HTTP 访问认证的行为相似,不同之处在 于其认证行为是在客户端与代理之间进行的。而客户端与服务器之间 进行认证时,首部字段 WWW-Authorization 有着相同的作用。

Retry-After : 首部字段 Retry-After 告知客户端应该在多久之后再次发送请求。主要 配合状态码 503 Service Unavailable 响应,或 3xx Redirect 响应一起使 用。 字段值可以指定为具体的日期时间(Wed, 04 Jul 2012 06:34:24 GMT 等格式),也可以是创建响应后的秒数。

Server : 首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用程 序的信息。不单单会标出服务器上的软件应用名称,还有可能包括版 本号和安装时启用的可选项。

Vary : 当代理服务器接收到带有 Vary 首部字段指定获取资源的请求 时,如果使用的 Accept-Language 字段的值相同,那么就直接从缓 存返回响应。反之,则需要先从源服务器端获取资源后才能作为 响应返回 。 首部字段 Vary 可对缓存进行控制。源服务器会向代理服务器传达关 于本地缓存使用方法的命令。 从代理服务器接收到源服务器返回包含 Vary 指定项的响应之后,若 再要进行缓存,仅对请求中含有相同 Vary 指定首部字段的请求返回 缓存。即使对相同资源发起请求,但由于 Vary 指定的首部字段不相 同,因此必须要从源服务器重新获取资源。

WWW-Authenticate : 首部字段 WWW-Authenticate 用于 HTTP 访问认证。它会告知客户端 适用于访问请求 URI 所指定资源的认证方案(Basic 或是 Digest)和 带参数提示的质询(challenge)。状态码 401 Unauthorized 响应中, 肯定带有首部字段 WWW-Authenticate。

 首部字段 Accept-Ranges
 首部字段 Age 
 首部字段 ETag
 首部字段 ETag
首部字段 Location 
 首部字段 Retry-After
首部字段 Server
vary

实体首部字段

实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首 部,用于补充内容的更新时间等与实体相关的信息。

Allow : 首部字段 Allow 用于通知客户端能够支持 Request-URI 指定资源的所 有 HTTP 方法。当服务器接收到不支持的 HTTP 方法时,会以状态码 405 Method Not Allowed 作为响应返回。与此同时,还会把所有能支 持的 HTTP 方法写入首部字段 Allow 后返回。

Content-Encoding : 首部字段 Content-Encoding 会告知客户端服务器对实体的主体部分选 用的内容编码方式。内容编码是指在不丢失实体信息的前提下所进行 的压缩。

Content-Language : 首部字段 Content-Language 会告知客户端,实体主体使用的自然语言 (指中文或英文等语言)。

Content-Length : 首部字段 Content-Length 表明了实体主体部分的大小(单位是字 节)。对实体主体进行内容编码传输时,不能再使用 Content-Length 首部字段。由于实体主体大小的计算方法略微复杂,所以在此不再展 开。

Content-Location : 首部字段 Content-Location 给出与报文主体部分相对应的 URI。和首 部字段 Location 不同,Content-Location 表示的是报文主体返回资源对 应的 URI。 比如,对于使用首部字段 Accept-Language 的服务器驱动型请求,当 返回的页面内容与实际请求的对象不同时,首部字段 Content-Location 内会写明 URI。(访问 http://www.hackr.jp/ 返回的对象却是 http://www.hackr.jp/index-ja.html 等类似情况)

Content-MD5 : 首部字段 Content-MD5 是一串由 MD5 算法生成的值,其目的在于检 查报文主体在传输过程中是否保持完整,以及确认传输到达。 对报文主体执行 MD5 算法获得的 128 位二进制数,再通过 Base64 编 码后将结果写入 Content-MD5 字段值。由于 HTTP 首部无法记录二进 制值,所以要通过 Base64 编码处理。为确保报文的有效性,作为接 收方的客户端会对报文主体再执行一次相同的 MD5 算法。计算出的 值与字段值作比较后,即可判断出报文主体的准确性。 采用这种方法,对内容上的偶发性改变是无从查证的,也无法检测出 恶意篡改。其中一个原因在于,内容如果能够被篡改,那么同时意味 着 Content-MD5 也可重新计算然后被篡改。所以处在接收阶段的客户 端是无法意识到报文主体以及首部字段 Content-MD5 是已经被篡改过 的。

Content-Range : 针对范围请求,返回响应时使用的首部字段 Content-Range,能告知客 户端作为响应返回的实体的哪个部分符合范围请求。字段值以字节为 单位,表示当前发送部分及整个实体大小。

Content-Type : 首部字段 Content-Type 说明了实体主体内对象的媒体类型。和首部字 段 Accept 一样,字段值用 type/subtype 形式赋值。 参数 charset 使用 iso-8859-1 或 euc-jp 等字符集进行赋值。

Expires : 首部字段 Expires 会将资源失效的日期告知客户端。缓存服务器在接 收到含有首部字段 Expires 的响应后,会以缓存来应答请求,在 Expires 字段值指定的时间之前,响应的副本会一直被保存。当超过 指定的时间后,缓存服务器在请求发送过来时,会转向源服务器请求 资源。 源服务器不希望缓存服务器对资源缓存时,最好在 Expires 字段内写 入与首部字段 Date 相同的时间值。 但是,当首部字段 Cache-Control 有指定 max-age 指令时,比起首部字 段 Expires,会优先处理 max-age 指令。

Last-Modified : 首部字段 Last-Modified 指明资源最终修改的时间。一般来说,这个 值就是 Request-URI 指定资源被修改的时间。但类似使用 CGI 脚本进 行动态数据处理时,该值有可能会变成数据最终修改时的时间。

在请求和响应两方的 HTTP 报文中都含有与实体相关的首部字段
 首部字段 Allow 
 首部字段 Content-Encoding
首部字段 Content-Language 
 首部字段 Content-Length
 首部字段 Content-MD5 
首部字段 Content-Range
首部字段 Expires
 首部字段 Last-Modified
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容