本章主要讲解了 HTTP 首部的结构,已经首部中各字段的用法。css
上图是 HTTP 请求报文的结构。html
HTTP 请求报文由方法、URI、HTTP 版本、HTTP 首部字段等组成。git
请求报文首部信息实例:github
GET / HTTP/1.1
Host: hackr.jp
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/2010010
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*; q=0
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
If-Modified-Since: Fri, 31 Aug 2007 02:02:20 GMT
If-None-Match: "45bae1-16a-46d776ac"
Cache-Control: max-age=0
复制代码
HTTP 响应报文由 HTTP 版本、状态码(数字和缘由短语)、HTTP 首部字段三部分组成。算法
下图是 HTTP 响应报文结构:跨域
响应报文的首部实例:浏览器
HTTP/1.1 304 Not Modified
Date: Thu, 07 Jun 2012 07:21:36 GMT
Server: Apache
Connection: close
Etag: "45bae1-16a-46d776ac"
复制代码
HTTP 首部字段传递重要信息,其结构基本以下:缓存
首部字段名:字段值
复制代码
例如:安全
Content-Type:text/html
复制代码
另外,有些首部字段能够有多个值,以下所示:bash
Keep-Alive:timeout=15,max=100
复制代码
HTTP 首部字段根据实际用途被分为四种类型。
通用首部字段
:请求报文和响应报文都会使用到的首部字段。请求首部字段
:从客户端向服务端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级的信息。响应首部字段
:从服务端向客户端发送响应报文时的首部。补充了响应的附加内容,也会要求客户端附加的内容信息。实体首部字段
:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体内容相关的信息。首部字段名 | 说明 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 逐跳首部、链接的管理 |
Date | 建立报文的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末尾的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其余协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
首部字段名 | 说明 |
---|---|
Accept | 用户代理可处理的媒体类型 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言(天然语言) |
Authorization | Web 信息认证 |
Expect | 期待服务器的特定行为 |
From | 用户的电子邮箱地址 |
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 首部字段。
其余还有一些非 HTTP/1.1 规范的首部字段也用的比较多,好比 Set-Cookie、Cookie 等等。
此外,HTTP 首部根据将定义成缓存代理和非缓存代理的行为,分红了两种类型——端到端首部(End-to-End Header)和逐跳首部(Hop-by-Hop Header)。
端到端首部类的首部字段会转发给请求/响应的最终接受对象,且必须保存在由缓存生成的响应中,另外规定它必须转发;
逐跳首部只对单次转发有效,会因经过缓存或代理而再也不转发。HTTP/1.1 以后的版本中使用逐跳首部须要提供 Connection 首部字段。
下面这些字段都属于逐跳首部字段:
全部其他字段皆为端到端首部字段。
下面开始详细介绍各个首部字段。
经过指定首部字段 Cache-Control,就能操做缓存的工做机制。
Cache-Control 的指令参数是可选的,多个指令之间经过逗号分开。该首部字段在请求和响应时均可以使用。
Cache-Control: private, max-age=0, no-cache
复制代码
Cache-Control 可用指令以下:
请求指令:
指令 | 参数 | 说明 |
---|---|---|
no-cache | 无 | 强制向源服务器再次验证 |
no-store | 无 | 不缓存请求或响应的任何内容 |
max-age=[秒] | 必需 | 响应的最大 age 值 |
max-stale(=[秒]) | 可省略 | 接受已过时的响应 |
min-fresh=[秒] | 必需 | 指望在指定的时间内的响应仍然有效 |
no-transform | 无 | 代理不可更改媒体类型 |
only-if-cached | 无 | 从缓存得到资源 |
cache-extension | - | 新指令标记(token) |
响应指令:
指令 | 参数 | 说明 |
---|---|---|
public | 无 | 可向任意方提供响应的缓存 |
private | 可省略 | 仅向特定用户返回响应 |
no-cache | 可省略 | 缓存前必须确认其有效性 |
no-store | 无 | 不缓存请求或响应的任何内容 |
no-transform | 无 | 代理不可更改媒体类型 |
must-revalidate | 无 | 可缓存但必须再向源服务器进行确认 |
proxy-revalidate | 无 | 要求中间缓存服务器对缓存的响应有效性再进行确认 |
max-age=[秒] | 必需 | 响应的最大 age 值 |
s-maxage=[秒] | 必需 | 公共缓存服务器响应的最大 age 值 |
cache-extension | - | 新指令标记(token) |
规定是否缓存的指令:
public 指令
Cache-Control: public
复制代码
当指定使用 public 指令时,则明确代表其余用户也可利用缓存。
private 指令
Cache-Control: private
复制代码
当指定 private 指令后响应只以特定的用户做为对象,当该对象向服务器发起请求时,服务器会返回缓存的资源。
no-cache 指令
Cache-Control: no-cache
复制代码
该指令的目的是为了防止使用过时的缓存资源。
若是客户端发送的请求中包含 no-cache 指令,则表示客户端将不会接受过时的缓存过的响应。因而,中间的代理服务器必须把请求转发给源服务器。
若是服务器返回的响应中包含 no-cache 指令,那么缓存服务器不能对资源进行缓存,源服务器之后也将再也不对缓存服务器请求中提出的资源有效性进行确认,且禁止其对资源响应进行缓存操做。
控制可执行缓存对象的指令:
no-store 指令
Cache-Control: no-store
复制代码
当使用 no-store 指令时,暗示请求或响应中包含机密信息。
所以该指令规定缓存不能在本地存储请求或响应的任一部分。
注意
从字面意义来讲,很容易把 no-cache 理解为不缓存,但事实上 no-cache 表明的是不缓存过时的资源,缓存会向源服务器确认有效性后再处理资源。no-store 才是真正的不进行缓存。
指定缓存期限和认证的指令:
s-maxage 指令
Cache-Control: smax-age=604800(单位:秒)
复制代码
该指令功能和 max-age 相同,不一样点是 s-maxage 指令只适合于供多位用户使用的公共缓存服务器。
当使用 smax-age 指令以后,直接会忽略 Expires 字段及 max-age 指令的处理。
max-age 指令
Cache-Control: max-age=604800(单位:秒)
复制代码
当客户端发送的请求中包含 max-age 指令时,若是断定缓存资源的缓存时间数值比指定的数值更小,那么客户端就接收缓存的资源。另外,当指定 max-age 值为 0,那么缓存服务器一般须要将请求转发给源服务器(至关因而 no-cache)。
当服务器返回的响应中包含 max-age 指令时,缓存服务器将不对资源的有效性再作确认,而 max-age 数值表明的是资源保存为缓存的最长时间。
应用 HTTP/1.1 版本的缓存的服务器遇到同时存在 Expires 首部字段的状况时,会优先处理 max-age 指令,而忽略掉 Expires 首部字段。而应用 HTTP/1.0 版本的服务器则偏偏相反。
min-fresh 指令
Cache-Control: min-fresh=60(单位:秒)
复制代码
min-fresh 指令要求缓存服务器返回至少还未过指定时间的缓存资源(即指定时间事后仍然是未过时的资源)。
max-stale 指令
Cache-Control: max-stale=3600(单位:秒)
复制代码
使用 max-stale 表示接受过时的缓存资源,后面的值表示具体过时的时长,表示响应不能已通过时超过该给定的时间。若是不传递数值,则表示不管通过多久,客户端都可以接受。
only-if-cached 指令
Cache-Control: only-if-cached
复制代码
使用该指令表示客户端仅在缓存服务器本地缓存目标资源的状况下才会要求其返回。即只接受已缓存的资源,而且不用向源服务器检查资源的有效性。若代理服务器本地缓存无响应,则返回 504 Gateway Timeout。
must-revalidate 指令
Cache-Control: must-revalidate
复制代码
使用该指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。
使用 must-revalidate 指令会忽略 max-stale 指令。
proxy-revalidate 指令
Cache-Control: proxy-revalidate
复制代码
该指令要求全部的缓存服务器在接收到客户端带有该指令的请求返回响应以前,必须再验证资源的有效性。
no-transform 指令
Cache-Control: no-transform
复制代码
该指令规定不管在请求仍是响应中缓存都不能改变实体的媒体类型。
这样能够防止缓存或者代理压缩图片等相似操做。
这个首部字段有一下两个做用:
Connection: 再也不转发的首部字段名
复制代码
这条语句就表示指定的首部字段再也不转发到下一级服务器(多是代理)。
除了上面的功能之外,该首部还能够管理持久链接:
Connection: close
复制代码
该指令明确指定断开当前链接。(HTTP/1.1 的全部链接默认都是长链接)
Connection: keep-alive
复制代码
以上指令明确指定当前链接为长链接。(适用于 HTTP/1.1 版本以前)
该字段代表 HTTP 报文建立的日期和时间。
Date: Tue, 03 Jul 2012 04:40:59 GMT
复制代码
该字段是 HTTP/1.1 版本的遗留字段,为了向后兼容而定义。
Pragma: no-cache
复制代码
与
Cache-Control: no-cache
复制代码
功能一致。
该字段事先说明在报文主体后记录了哪些首部字段,可用于 HTTP/1.1 版本分块传输编码时。
该首部字段指定了在传输报文主体时所使用的编码方式。
Transfer-Encoding: chunked
复制代码
该首部字段用于检测 HTTP 协议及其余协议是否能够升级为更高版本进行通讯,其参数值能够用来指定一个彻底不一样的通讯协议。
该首部字段是为了追踪客户端与服务器之间的请求和响应报文的传输路径。
报文通过代理或者网关时,会在首部字段 Via 中附加该服务器的信息,而后再进行转发。并且这个字段不只能够用于追踪报文的转发,还能够避免请求回环发生。
各个代理服务器会向 Via 添加自身服务器的信息。
其中 1.0
以及 1.1
的开头表示服务器的 HTTP 协议版本。
该首部自担一般告诉用户一些缓存相关的问题的警告,具体格式以下:
Warning: [警告码][警告的主机:端口号]“[警告内容]”([日期时间])
复制代码
具体警告码能够查阅《图解 HTTP》表 6-7。
请求首部字段是从客户端发往服务器端时请求报文中所使用的字段。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
复制代码
该首部字段能够通知服务器,用户代理可以处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype
的形式一次指定多种媒体类型。
经常使用媒体类型:
文本文件:
text/html,text/plain,text/css,application/xhtml+xml,application/xml...
复制代码
图片文件
image/jpg,image/gif,image/png...
复制代码
视频文件
video/mpeg,video/quicktime...
复制代码
应用程序使用的二进制文件
application/octet-stream,application/zip...
复制代码
多个协议之间使用逗号分隔,分号以前表明媒体类型,分号以后表明权重。
当服务器提供多种内容时,会首先返回权重最高的媒体类型。
Accept-Charset: iso-8859-5,unicode-1-1;q=0.8
复制代码
该字段可用来通知服务器用户代理支持的字符集以及字符集的权重。
Accept-Encoding: gzip,deflate
复制代码
该字段用来告知服务器用户代理支持的内容编码及内容编码格式的优先级。
如下是最经常使用的几个内容编码格式:
gzip
由文件压缩程序 gzip(GNU zip)生成的编码格式(RFC1952)。
compress
由 UNIX 文件压缩程序 compress 生成的编码格式。
deflate
组合使用 zlib 格式及有 deflate 压缩算法生成的编码格式。
identity
不执行压缩或者不会变化的默认编码格式。
告知服务器可以处理的天然语言。
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
复制代码
该字段用于告知服务器用户代理的认证信息。
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==
复制代码
Expect: 100-continue
复制代码
客户端使用该字段来告知服务器指望出现的某种特定行为。
若是服务器没法理解这种特定的行为,则会返回 417 Expectation Failed
的错误。
From: info@hackr.jp
复制代码
该字段用来告知服务器使用用户代理的用户电子邮箱地址。
Host: www.hackr.jp
复制代码
不少时候一台服务器上部署了多个网站,对应着多个域名,当 DNS 解析到服务器以后,咱们须要知道用户访问的是哪一个网址,以便分配到对应的端口给对应的程序进行处理,因此 Host 就用来告知服务器端用户访问的主机名称和端口号。
Host 首部是惟一一个必须被包含在请求内的首部字段。
若是服务器未设定主机名,那么发送一个空值便可。
形如 If-xxx 的请求首部字段,均可以称为条件请求。服务器接收到条件请求以后,只有在判断条件为真时才会执行请求。
If-Match: "123456"
复制代码
该首部字段属于附带条件之一,它会告知服务器匹配资源所用的实体标记(ETag,后面会讲)值。服务器会比对 If-Match 的字段值和资源的 ETag 值,仅当二者一致时才会执行请求。反之会返回状态码 412 Precondition Failed 的响应。
使用 *
时,服务器会匹配任意的 ETag 值。
该首部字段指定一个时间点,若是在该时间点以后有修改过资源,则会响应请求。
If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT
复制代码
若是在这个时间点以后没有修改过资源,则返回 304 Not Modified 状态码的响应。
该字段与 If-Match 的做用相反。当该字段的值不匹配资源的 ETag 时才会响应请求。
该字段的值如果跟 ETag 的值或更新的日期时间相匹配,那么就做为范围请求处理;若是没法匹配的话就返回全体资源。
If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT
复制代码
该首部字段和 If-Modified-Since
做用相反,它的做用是告知服务器指定的资源只有在指定日期以后没有发生变动的状况下才处理请求,不然就返回 412 Precondition Failed 状态码。
经过 TRACE 方法或者 OPTIONS 方法发送包含首部字段 Max-Forward 的请求时,该字段以十进制整数形式指定可通过的服务器的最大数目。
Max-Forward: 10
复制代码
Proxy-Authorization: Basic dGlwObjkNLAGFfY5
复制代码
该字段告知服务器认证所须要的信息,该认证行为发生在客户端与代理服务器之间。
Range: bytes=5001-10000
复制代码
该字段适用于只获取部分资源的范围请求,它告知了服务器所须要的服务器资源的指定范围。
接收到携带该字段请求的服务器会返回状态码为 206 Partial Content 的响应,若是没法处理该范围请求,则服务器会返回状态码为 200 OK 的响应以及所有资源。
Referer: http://www.hackr.jp/index.htm
复制代码
该首部字段告知服务器请求的原始资源的 URI。
根据这个字段,服务器能够知道当前请求是从哪一个地址跳转过来的,更多关于 Referer 的内容能够阅读阮一峰老师的博客:HTTP Referer 教程。
TE:gzip,deflate;q=0.5
复制代码
该字段会告知服务器客户端可以处理的响应的传输编码方式及相对的优先级,其功能和 Transfer-Encoding 的功能相似。
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
复制代码
该字段会将建立请求的浏览器和用户代理名称的相关信息发送给服务器。当爬虫发起请求时,有可能会在该字段添加做者的地址。
值得一提的是有些网站会作出反爬虫策略,他们会验证 User-Agent 字段是否来自于浏览器,若是不是的话就会拒绝爬虫的请求;因此若是要想继续拿到想要的信息的话就会经过该字段将爬虫伪形成浏览器。
响应首部字段是由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求信息等。
Accept-Ranges: bytes
复制代码
该字段用于告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。当服务器可以处理客户端的范围请求时,其值为 bytes,反之为 none。
ETag: 600
复制代码
该首部字段告知客户端源服务器在多久以前建立了响应,字段的值的单位为秒。
若建立该响应的服务器是缓存服务器,Age 值是指缓存后的响应再次发起认证到再次认证完成的时间值。
ETag: "82e22293907ce725faf67773957acd12"
复制代码
首部字段 ETag 能告知客户端实体标志。它是一种可以将资源以字符串形式作惟一性标志的方式。服务器会为每份资源分配对应的 ETag 值。
当资源更新时,ETag 值也要更新。完成 ETag 值时,并无统一的算法规则,仅仅由服务器分配。
访问某个资源的 URI 通常不会发生改变,可是当资源自己发生了变化时,资源对应的 ETag 也会更新。
强 ETag 和弱 ETag
ETag 值有强弱之分,强 ETag 值无论资源发生多么细微的变化都会随之变化,而弱 ETag 值只有在资源发生了根本改变并产生差别时才会发生变化。
Location: http://www.usagidesign.jp/sample.html
复制代码
该首部字段能够将接受响应的客户端引导到某一个与其请求 URI 位置不一样的资源。
基本上该字段会配合 3xx 重定向状态码一块儿使用。
Proxy-Authenticate: Basic realm="Usagidesign Auth"
复制代码
该首部字段会把代理服务器所要求的认证信息发送给客户端。
Retry-After:120
复制代码
该首部字段告知客户端在多久以后再次发起请求。该字段能够指定为具体的时间或者建立响应后的秒数。
该首部字段会告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。
Server: Apache/2.2.17 (Unix)
复制代码
Vary: Accept-Language
复制代码
该首部字段可对缓存进行控制,源服务器会向代理服务器传达关于本地缓存使用方法的命令。
具体来讲,该首部字段会指定一个其余的首部字段,好比上面的 Accept-Encoding,当指定字段的值未发生变化时,则使用缓存资源;若是指定字段的值发生了变化时,则须要向源服务器请求最新的资源。
这个字段能够指定 User-Agent,防止移动端浏览器访问页面时访问了 PC 端页面的缓存。
当该字段指定为 *
时,全部的请求都会被视为惟一的而且会被缓存。
WWW-Authenticate: Basic realm="Usagidesign Auth"
复制代码
该首部字段用于 HTTP 访问认证。
实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间和实体相关的信息。
Allow:GET,HEAD
复制代码
该首部字段用于通知客户端服务器可以支持的 HTTP 方法,当服务器接收到不支持的请求方法时,会返回 405 Not Allowed 状态码。
Content-Encoding:gzip
复制代码
该首部字段会告知客户端对实体的主体部分所使用的内容编码格式。
具体编码格式能够参考 2.5.3 Accept-Encoding。
Content-Language:zh-CN
复制代码
该首部字段用于通知客户端实体主体所使用的天然语言。
Content-Length:15000
复制代码
该首部字段代表了实体主体的大小(单位是字节)。
若是对实体主体采用了内容编码传输时,不能再使用 Content-Length 首部字段。
Content-Location:http://www.hackr.jp/index-ja.html
复制代码
该首部字段给出与报文主体相对应的 URI。当返回的页面内容与请求的实际对象不相同时,首部字段 Content-Location 会写明 URI。
Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==
复制代码
客户端会对接收到的报文主体采用 MD5 算法进行散列计算,而后与 Content-MD5 的值进行比较以对接收到的主体内容进行完整性校验。
散列算法进行计算的作法主要用于防止传输内容被篡改,由于同一个输入经过散列算法计算之后获得的结果是相同的,不一样的输入通过散列算法计算以后获得的结果基本不会重复。这也是许多提供资源下载的网站同时会给出资源对应 HASH 值的缘由。
可是 Content-MD5 并不可靠,由于若是传输主体的内容能够被修改的话,Content-MD5 的值一样也可能被修改过,因此并不可靠。为了确保资源不被篡改,最好仍是使用 HTTPS。
Content-Range: bytes 5001-10000/10000
复制代码
针对范围请求,该首部字段告知客户端返回的响应的实体的哪些部分符合范围请求,单位为字节。
Content-Type: text/html; charset=UTF-8
复制代码
该首部字段说明了实体主体内的媒体类型。
Expires: Wed, 04 Jul 2012 08:26:05 GMT
复制代码
该首部字段将资源失效的日期告知客户端。
当首部字段 Cache-Control 有指定 max-age 指令时,会优先处理 max-age 指令。
Last-Modified: Wed, 23 May 2012 09:59:55 GMT
复制代码
该首部字段指明了资源的最终修改时间。
Cookie 的工做机制是用户识别及状态管理。
为 cookie 服务的首部字段:
首部字段名 | 说明 | 首部类型 |
---|---|---|
Set-Cookie | 开始状态管理所使用的 Cookie 信息 | 响应首部字段 |
Cookie | 服务器接收到的 Cookie 信息 | 请求首部字段 |
当服务器开始准备管理客户端的状态时,会实现告知各类信息。
下面的表格列举了 Set-Cookie 的字段值。
属性 | 说明 |
---|---|
NAME=VALUE | 赋予 Cookie 的键和对应值 |
expires=DATE | Cookie 的有效期 |
path=PATH | 将服务器上的文件目录做为 Cookie 的适用对象(若不指定则默认为文档所在的文件目录) |
domain=域名 | 做为 Cookie 适用对象的域名(若不指定则默认为建立 Cookie 的服务器的域名) |
Secure | 仅在 HTTPS 安全通讯时才发送 Cookie |
HttpOnly | 加以限制,使 Cookie 不能被 JavaScript 所访问 |
下面详细讲讲 Cookie 的各个属性。
expires
:该属性指定浏览器能够发送 Cookie 的有效期。当省略 expires 属性时,其有效期仅限于维持浏览器会话(Session)时间段内。这一般限于浏览器关闭以前。
另外须要注意的是一旦 Cookie 从服务器端发送到客户端,服务器端就不存在能够显式删除 Cookie 的方法。只能经过覆盖已有的 Cookie 来达到删除的目的。
path
:该属性用于限定指定 Cookie 的发送范围的文件目录。可是有其余办法能够避开这个限制,因此不要对它抱有太大指望。
domain
:该属性的域名可作到与结尾匹配一致,好比指定 domain 为 example.com,此时 www.example.com 和 www2.example.com 也均可以访问 Cookie。因此不指定域名的状况下更加安全,由于默认只有当前响应的服务器的域名能够访问 Cookie。
secure
:该属性限制 Web 页面仅在 HTTPS 安全链接时才发送 Cookie。当省略该属性时,HTTP 和 HTTPS 协议的指定域名均可以访问 Cookie。
HttpOnly
:该属性使得 JavaScript 没法对 Cookie 进行读取操做。
Cookie:status=enable
复制代码
首部字段 Cookie 会告知服务器,当客户端想要得到 HTTP 状态管理的支持时,就会在请求中包含从服务器中获取到的 Cookie。
HTTP 首部字段是能够自行扩展的,因此在 Web 服务器和浏览器的应用上,会出现一些非标准的首部字段。
下面是比较经常使用的非标准首部字段:
X-Frame-Options: DENY
复制代码
该首部字段属于 HTTP 响应首部,用于控制网站内容在其余 Web 网站的 Frame 标签内的显示问题。其主要目的是防止点击劫持攻击(clickjacking)。
此处的 Frame 包括 iframe、frame、object 等标签
该字段能够指定三类值:
DENY
:拒绝被嵌套到 Frame,即便是相同域名下的页面也不行SAMEORIGIN
:该页面只能够被嵌入到相同域名页面的 Frame 中ALLOW-FROM uri
:表示能够在指定来源的页面中被嵌套该字段属于响应首部,是针对跨域脚本攻击的一种策略,用于控制浏览器 XSS 防御机制的开关。
该字段能够设置一下了两个值:
DNT:1
复制代码
该首部字段属于 HTTP 请求首部,其中 DNT 是 Do Not Track 的简称,表示拒绝我的信息被收集。
0 表示赞成被追踪,1 表示拒绝被追踪。
该首部字段属于响应首部,经过利用 P3P 技术让网站上的我的隐私变成仅供程序可理解的形式。