「 图解HTTP 」 读书笔记 第六章 下

4. 请求首部字段

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

请求首部字段.png
4.1 Accept
Accept.png
Accept: text/html,application/xhtml+xml,application/xml;q=0.9

Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型

媒体类型示例

  • 文本文件

    text/html,text/plain,text/css...

    application/xhtml+xml,application/xml...

  • 图片文件

    image/jpeg,image/png,image/gif...

  • 视频文件

    video/mpeg,video/quicktime...

  • 应用程序使用的二进制文件

    application/octet-stream,application/zip...

当服务器提供多种内容时,将会首先返回权重值最高的媒体类型

4.2 Accept-Charset
Accept-Charset.png
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8

Accept-Charset 首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序

可一次指定多种字符集,与首部字段 Accept 相同的可用权重 q 值来表示相对优先级

该首部字段用于内容协商机制的服务器驱动协商

4.3 Accept-Encoding
Accept-Encoding.png
Accept-Encoding: gzip, deflate

Accept-Encoding 首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。可一次行指定多种内容编码

内容编码示例:

  • gzip

    由文件压缩程序 gzip(GNU zip) 生成的编码格式

  • compress

    由 UNIX 文件压缩程序 compress 生成的编码格式

  • deflate

    组合使用 zlib 格式及由 deflate 压缩算法生成的编码格式

  • identity

    不执行压缩或不会变化的默认编码格式

采用权重 q 值来表示相对优先级,也可使用星号 (*)作为通配符,指定任意的编码格式

4.4 Accept-Language
Accept-Language.png
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3

首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级,可一次指定多种语言集

4.5 Authorization
Authorization.png
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==

首部字段 Authorization 是用来告知服务器,用户代理的认证信息

4.5 Expect
Expect.png
Expect: 100-continue

客户端使用首部字段 Expect 来告知服务器,期望出现的某种特定行为

4.7 Form
Form.png

首部字段 Form 用来告知服务器,使用用户代理的用户的电子邮件地址。通常其使用目的就是为了显示搜索引擎等用户的代理的负责人的电子邮件联系方式

4.8 Host
Host.png
Host: www.hackr.jp

首部字段 Host 会告知服务器,请求的资源所处的互联网主机名和端口号

Host 首部字段在 HTTP/1.1 规范内是唯一一个必须被包含在请求内的首部字段

4.9 If-Match
If-Match.png

形如 If-xxx 这种形式的请求首部字段,都可称为条件请求。服务器接受到附带条件的请求后,只有判断附带条件为真时,才会执行请求

示例:

If-Match-ETag.png

首部字段 If-Match 属附带条件之一,它会告知服务器匹配资源所用的的实体标记(ETag)值

服务器会对比 If-Match 的字段值和资源的 ETag 值,仅当两者一只时,才会执行请求。反之,则返回状态码 412 Precondition Failed 的响应

4.10 If-Modified-Since
If-Modified-Since.png
If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT

首部字段 If-Modified-Since 属附带条件之一,它会告知服务器若 If-Modified-Since 字段值早于资源的更新时间,则希望能处理该请求

If-Modified-Since 用于确认代理或客户端拥有的本地资源的有效性

4.11 If-None-Match
If-None-Match.png

首部字段 If-None-Match 属于附带条件之一,用于指定 If-None-Match 字段值的实体标记(ETag)值与请求资源 的 ETag 不一致时,它就会告知服务器处理该请求。和首部字段 If-Match 作用相反

在 GET 或 HEAD 方法中使用首部字段 If-None-Match 可获取最新的资源

4.12 If-Range
If-Range.png

首部字段 If-Range 属于附带条件之一,它告知服务器若指定的 If-Range 字段值(ETag 值或时间)和请求资源的 ETag 值或时间一致时,则作为范围请求处理。反之,返回全体资源

4.13 If-Unmodified-Since
If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT

首部字段 If-Unmodified-Since 和首部字段 If-Modified-Since 的作用相反,它的作用是告诉服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求

4.14 Max-Forwards
Max-Forwards.png
Max-Forwards: 10

通过 TRANCE 方法或 OPTIONS 方法,发送包含首部字段 MAx-Forwards 的请求时,该字段以十进制整数形式指定可经过的服务器最大数目。服务器在往下一个服务器请求转发之前,Max-Forwards 的值减 1 后重新赋值,当服务器接受到 Max-Forwards 的值为 0 的请求时,则不再进行转发,而是直接返回响应

4.15 Proxy-Authorization
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5

接受从代理服务器发来的认证质询时,客户端会发送包含首部字段 Proxy-Authorization 的请求,以告知服务器认证所需的信息

4.16 Range
Range: bytes=5001-10000

对于只需要获取部分资源的范围请求,包含首部字段 Range 即可告知服务器资源的指定范围

接受到附带 Range 首部字段请求的服务器,会在处理请求之后返回状态码为 206 Partial Content 的响应。无法处理该范围请求时,则会返回状态码 200 OK的响应和全部资源

4.17 Referer
Referer.png
Referer: http://www.hackr.jp/index.htm

首部字段 Referer 会告知服务器请求的原始资源的 URI

4.18 TE
TE: gzip, deflate;q=0.5

首部字段 TE 会告知服务器客户端能够处理响应的传输编码方式及相对优先级。和首部字段 Accept-Encoding 的功能很像,但是用于传输编码

4.19 User-Agent
User-Agent.png
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/201001

首部字段 User-Agent 会将创建请求的浏览器好用户代理等信息传达给服务器

5. 响应首部字段

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

5.1 Accept-Ranges
Accept-Ranges.png

首部字段 Accept-Ranges 用来告知客户端,服务器能否处理范围请求,以指定获取服务器端某个部分的资源

可指定的字段值有两种,可处理范围请求时指定其为 bytes,反之则指定其为 none

5.2 Age
Age.png
Age: 600

首部字段 Age 能告知客户端,源服务器在多久前创建了响应,字段值的单位为秒

若创建该响应的服务器是缓存服务器,Age 值是指缓存后的响应再次发起认证到认证完成的时间值。代理创建响应时必须加上首部字段 Age

5.3 ETag
ETag.png
ETag: "82e22293907ce725faf67773957acd12"

首部字段 ETag 能告知客户端实体标识。它是一种可以将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag 值

当资源更新时,ETag 值也需要更新。生成 ETag 值时,并没有统一的算法规则,而仅仅是由服务器来分配

ETag 值有强 ETag 值 和 弱 ETag 值之分

强 ETag 值

ETag: "usagi-1234"

强 ETag 值,不论实体发生多么细微的变化都会改变其值

弱 ETag 值

ETag: W/"usagi-1234"

弱 ETag 值只用于提示资源是否相同。只有资源发生了根本改变,产生差异时才会改变 ETag 值。这时,会在字段值最开始处附加 W/

5.4 Location
Location.png
Location: http://www.usagidesign.jp/sample.html

使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置不同的资源

几乎所有的浏览器在接受到包含首部字段 Location 的响应后,都会强制性的尝试对已提示的重定向资源的访问

5.5 Proxy-Authenticate
Proxy-Authenticate: Basic realm="Usagidesign Auth"

首部字段 Proxy-Authenticate 会把由代理服务器所要求的认证信息发送给客户端

5.6 Retry-After
Retry-After.png
Retry-After: 120

首部字段 Retry-After 告知客户端应该在多久之后再次发送请求

5.7 Server
Server.png
Server: Apache/2.2.17 (Unix)

首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。

5.8 Vary
Vary.png
Vary: Accept-Language

首部字段 Var 可对缓存进行控制,源服务器会向代理服务器传达关于本地缓存使用方法的命令

5.9 WWW-Authenticate
WWW-Authenticate: Basic realm="Usagidesign Auth"

首部字段 WWW-Authenticate 用于 HTTP 访问认证,它会告知客户端适用于访问请求 URI 所指定资源的认证方案和带参数提示的质询

6. 实体首部字段

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

实体首部字段.png
6.1 Allow
Allow.png
Allow: GET,HEAD

首部字段 Allow 用于通知客户端能够支持 Request-URI 指定资源的所有 HTTP 方法

当服务器接受到不支持的 HTTP 方法时,会以状态码 405 Method Not Allowed 作为响应返回,还会把所有能支持 HTTP 方法写入首部字段 Allow 后返回

6.2 Content-Encoding
Content-Encoding.png
Content-Encoding: gzip

首部字段 Content-Encoding 会告知客户端,服务器对实体的主体部分选用的内容编码方式

内容编码是指在不丢失实体信息的前提下所进行的压缩

主要采用以下 4 种内容编码方式

  • gzip

    由文件压缩程序 gzip(GNU zip) 生成的编码格式

  • compress

    由 UNIX 文件压缩程序 compress 生成的编码格式

  • deflate

    组合使用 zlib 格式及由 deflate 压缩算法生成的编码格式

  • identity

    不执行压缩或不会变化的默认编码格式

6.3 Content-Language
Content-Language.png
Content-Language: zh-CN

首部字段 Content-Language 会告知客户端,实体主体使用的自然语言

6.4 Content-Length
Content-Length.png
Content-Length: 15000

首部字段 Content-Length 表明了实体主体部分的大小(单位:字节)

对实体主体进行内容编码传输时,不能再使用 Content-Length 首部字段

6.5 Content-Location
Content-Location: http://www.hackr.jp/index-ja.html

首部字段 Content-Location 给出与报文主体部分相对应的 URI,Content-Location 表示的是报文主体返回资源对应的 URI

6.6 Content-MD5
Content-MD5.png
Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==

首部字段 Content-MD5 是一串由 MD5 算法生成的值,其目的在于检查报文主体再传输过程中是否保持完整,以及确认传输到达

6.7 Content-Range
Content-Range.png
Content-Range: bytes 5001-10000/10000

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

6.8 Content-Type
Content-Type: text/html; charset=UTF-8

首部字段 Content-Type 说明了实体主体内对象的媒体类型,和首部字段 Accept 一样,字段值用 type/subtype 形式赋值

6.9 Expires
Expires.png
Expires: Wed, 04 Jul 2012 08:26:05 GMT

首部字段 Expires 会将资源失效的日期告知客户端

6.10 Last-Modified
Last-Modified.png
Last-Modified: Wed, 23 May 2012 09:59:55 GMT

首部字段 Last-Modified 指明资源最终修改的时间

7. 为 Cookie 服务的首部字段

Cookie 的工作机制是用户识别及状态管理

为 Cookie 服务的首部字段如下:

首部字段名 说明 类型
Set-Cookie 开始状态管理所使用的 Cookie 信息 响应首部字段
Cookie 服务器接受到的 Cookie 信息 请求首部字段
Cookie 首部字段.png
7.1 SetCookie
Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; 

当服务器准备开始管理客户端的状态时,会事先告知各种信息

Set-Cookie 字段的属性如下:

属性 说明
NAME = VALUE 赋予 Cookie 的名称和值(必须项)
expires = DATE Cookie 的有效期
path = PATH 将服务器上的文件目录作为 Cookie 的适用对象
domain = 域名 作为 Cookie 适用对象的域名
Secure 仅在 HTTPS 通信时才会发送 Cookie
HttpOnly 加以限制,使 Cookie 不能被 JavaScrip 脚本访问
  • expires 属性

    Cookie 的 expires 属性指定浏览器可发送 Cookie 的有效期

    当省略 expires 属性时,其有效期限仅限于维持浏览器会话(Session 时间段内)

  • path 属性

    Cookie 的 path 属性可用于限制指定 Cookie 发送范围的文件目录

  • domain 属性

    通过 Cookie 的 domain 属性指定的域名可做到与结尾匹配一致

  • Secure 属性

    Cookie 的 secure 属性用于限制 Web 页面仅在 HTTPS 安全连接时,才可以发送 Cookie

    发送 Cookie 时,指定 secure 属性的方法如下所示

    Set-Cookie: name=value; secure
    

    上述例子仅当在 https://www.example.com 安全连接的情况下才会进行 Cookie 的回收

    当省略 secure 属性时,不论是 HTTP 还是 HTTPS 都会对 Cookie 进行回收

  • HttpOnly 属性

    Cookie 的 HttpOnly 属性是 Cookie 的扩展功能,它使 JavaScript 脚本无法获得 Cookie。其主要目的是为防止跨站脚本攻击对 Cookie 的信息窃取

    发送指定 HttpOnly 属性的 Cookie 方法如下所示

    Set-Cookie: name=value; HttpOnly
    
7.2 Cookie
Cookie: status=enable

首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理支持时,就会在请求中包含从服务器接受到的 Cookie

接受到多个 Cookie 时,同样也可以以多个 Cookie 形式发送

8. 其他首部字段

HTTP 首部字段是可以自行扩展的,所以在 Web 服务器和浏览器的应用上,会出现各种非标准的首部字段

最常用的首部字段如下:

  • X-Frame-Options

  • X-XSS-Protection

  • DNT

  • P3P

8.1 X-Frame-Options
X-Frame-Options: DENY

首部字段 X-Frame-Options 属于 HTTP 响应首部,用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题,其主要目的是为了防止点击劫持攻击

首部字段 X-Frame-Options 有以下两个可指定的字段值

  • DENY 拒绝

  • SAMEORIGIN 仅同域名下的页面匹配时许可

8.2 X-XXS-Protection
X-XSS-Protection: 1

首部字段 X-XXS-Protection 属于 HTTP 响应首部,它是针对跨站脚本攻击的一种对策,用于控制浏览器 XSS 防护机制的开关

首部字段 X-XXS-Protection 可指定的字段值如下:

  • 0 将 XXS 过滤设置成无效状态

  • 1 将 XXS 过滤设置成有效状态

8.3 DNT
DNT.png
DNT: 1

首部字段 DNT 属于 HTTP 请求首部,其中 DNT 是 Do Not Track 的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法

首部字段 DNT 可指定的字段值如下:

  • 0 同意被追踪

  • 1 拒绝被追踪

由于首部字段 DNT 的功能具备有效性,所有 Web 服务器需要对 DNT 做对应的支持

8.4 P3P
P3P: CP="CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa 

首部字段 P3P 属于 HTTP 响应首部,通过利用 P3P (The Platform for
Privacy Preferences,在线隐私偏好平台)技术,可以让 Web 网站上的个人隐私变成一种仅供程序可理解的形式,,以达到保护用户隐私的目的

要进行 P3P 的设定,需要按照以下步骤进行

  1. 创建 P3P 隐私

  2. 创建 P3P 隐私对照文件后,保存命名在 /w3c/p3p.xml

  3. 从 P3P 隐私中新建 Compact policies 后,输出到 HTTP 响应中

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

推荐阅读更多精彩内容