目录
HTTP首部
HTTP协议的请求和响应报文中必定包含HTTP首部。
HTTP中字段表示方式:字段名:字段值1,字段值2
通用首部字段:请求和响应双方都会使用的首部。
请求首部字段:从客户端向服务器端发送请求报文时使用的首部。
响应首部字段:从服务器端向客户端返回报文时使用的首部。
实体首部字段:针对请求报文和响应报文的实体部分使用的字段。
通用首部字段
Cache-Control字段:
客户端可使用的缓存属性指令
指令 | 参数 | 说明 |
no-cache | 无 | 强制向源服务器再次验证 |
no-store | 无 | 不缓存请求或响应中的任何内容 |
max-age=[秒] | 必需 | 设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒) |
max-stale=([秒]) | 可省略 | 表明客户端愿意接收一个已经过期的资源。 可选的设置一个时间(单位秒),表示响应不能超过的过时时间。 |
min-fresh=[秒] | 必需 | 表示客户端希望在指定的时间内获取最新的响应 |
no-transform | 无 | 不得对资源进行转换或转变。Content-Encoding, Content-Range, Content-Type等HTTP头不能由代理修改。例如,非透明代理可以对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。 no-transform指令不允许这样做。 |
only-if-cached | 无 | 表明如果缓存存在,只使用缓存,无论原始服务器数据是否有更新 |
cache-extension | - | 新指令标记(token) |
服务器端可使用缓存属性指令
指令 | 参数 | 说明 |
public | 无 | 表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存 |
private | 可省略 | 表明响应只能被单个特定用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。 |
no-cache | 可省略 | 强制所有缓存了该响应的缓存用户,在使用已存储的缓存数据前,发送带验证器的请求到源服务器确认有效性。 |
no-store | 无 | 缓存不存储有关客户端请求或服务器响应的任何内容。 |
no-transform | 无 | 不得对资源进行转换或转变。Content-Encoding, Content-Range, Content-Type等HTTP头不能由代理修改。例如,非透明代理可以对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。 no-transform指令不允许这样做。 |
must-revalidate | 无 | 缓存必须在使用之前验证旧资源的状态,并且不可使用过期资源 |
proxy-revalidate | 无 | 与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略 |
max-age=[秒] | 必需 | 设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒) |
s-maxage=[秒] | 必需 | 覆盖max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),并且私有缓存中它被忽略。 |
注:在HTTP1.1中缓存服务器遇到同时存在Expires首部字段的情况是,会优先处理max-age字段,忽略掉Expires首部字段。
Connection字段
- 控制不再转发给代理的首部字段
- 管理持久连接
Connection:字段名 表示某个字段不再转发给代理
Connection:Keep-Alive 表示连接是持久化连接,HTTP1.1版本默认状态。
Connection:close 表示为非持久化连接,每次请求响应后都会断开TCP连接。
Date字段
表示报文创建的时间
Pragma字段
为兼容http1.1以前所保留的兼容字段。
规范的唯一定义,如下
Pragma:no-cache 只用于客户端发送请求中,表示强制向源服务器再次验证
Trailer字段
说明在报文主体后记录了哪些首部字段,应用在分块传输编码时。
Transfer-Encoding字段
规定了传输报文主体时采用的编码方式 。
注:HTTP/1.1的传输编码方式仅对分块传输编码有效。
Upgrade字段
用户检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来制定一个完全不同的通信协议。如,Upgrade:TLS/1.0
注:Upgrade首部字段产生作用仅限于客户端相邻的服务器。因此,还需额外制定Connection:Upgrade 表示不再转发此字段。
Via字段
追踪客户端与服务器之间的请求和响应报文的传输路径。可在via首部附加服务器信息,用逗号进行分隔,也可增加一个新的Via首部写入服务器信息。
Warning字段
告知用户一些与缓存相关的问题的警告。
警告码 | 警告内容 | 说明 |
110 | Response is stale(响应已过期) | 代理返回已过期的资源 |
111 | Revalidation failed(再验证失败) | 代理无法验证资源有效性时失败(服务器无法到达等原因) |
112 | Disconnection operation(断开链接操作) | 代理与互联网链接被故意切断 |
113 | Heuristic expiration(试探性过期) | 响应的使用期超过24小时(有效缓存的设定时间大于24小时的情况下) |
199 | Miscellaneous warning(杂项警告) | 任意警告的内容 |
214 | Tansformation applied(使用了转换) | 代理对内容编码或媒体类型等执行了某些处理时 |
299 | Miscellaneous persistent warning(持久杂项警告) | 任意警告的内容 |
请求首部字段
Accept字段
表示通知服务器,客户端能够处理的媒体类型(数据类型)以及媒体类型的优先级。如,Accept:text/html,application/xml;q=0.9 其中q值(0<q≤1)为权重,可精确到小数点后3位,没有写权重的默认为1.0
Accept-Charset字段
表示通知服务器客户端支持的字符集和字符集的相对优先顺序,同样用q值表示权重。
Accept-Encoding字段
表示通知服务器客户端支持的内容(指报文主体)编码以及内容编码的优先级。也可使用“*”号表示任意编码。
常见的几种内容编码
编码 | 说明 |
gzip | 由文件压缩程序生成的编码格式 |
compress | 采用Unix的文件压缩程序 |
deflate | 用zlib的格式压缩的 |
identity | 没有改变,采用默认编码 |
Accept-Language字段
告知服务器客户端能够处理的自然语言集(中文或英文等),以及自然语言的相对优先级。
Authorization字段
告知服务器客户端的认证信息(证书值)。通常在接收到401状态码响应后,浏览器会把次首部字段加入请求。
Expect字段
用于指出客户端要求的特殊的服务器行为。若服务器不能理解或者满足Expect域中的任何期望值,则必须返回417(Expectation Failed)状态,或者如果请求有其他问题,返回4xx状态。如,Expect:100-continue(状态码100 Continue之意。另外HTTP/1.1中之定义了这一个)
From字段
告知服务器使用用户代理的用户的电子邮件地址。通常,目的是为了显示搜索引擎等用户代理的负责人的电子邮件联系方式。
Host字段
告知服务器请求资源所处的互联网主机名和端口号。
注:HTTP/1.1规范中此字段是唯一一个必须被包含在请求内的首部字段
条件请求字段
If-XXX类型的请求首部字段,都可称为条件请求,服务器在收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
If-Match字段
告知服务器匹配资源所用的实体标记(ETag)值,这时服务器无法使用弱ETag值。当值匹配时执行请求,否则返回412状态码。另外,”*”表示任何值。如,If-Math:”123456” 注: ETag值必须放在引号内。
说明:ETag值类似于资源在服务器中的唯一标示。
If-Modified-Since字段
告知服务器返回字段指定时间之后发生了更新的资源,否则返回304。用于确认代理或者客户端拥有的本地资源的有效性。
If-None-Match字段
告知服务器字段值与ETag值不一致时,可处理该请求。与If-Match刚好相反。
If-Range字段
告知服务器若指定的字段值(ETag值或者时间)和请求资源的ETag值或者时间相一致时执行范围请求。反之,则返回全体资源。
If-Unmodified-Since字段
告知服务器指定的请求资源只有在字段值内指定的日期时间之后未发生更新的情况下,才处理请求。
Max-Forwards字段
通过TRACE方法或者OPTIONS方法时,该字段以十进制整数形式指定可经过的服务器最大数目,当其值为0时,当前服务不再进行转发,直接返回响应。
Proxy-Authorization字段
接收到代理服务器发来的认证质询时,客户端会发送该字段告知服务器认证所需的信息。
Range字段
告知服务器获取部分资源的范围,成功返回206状态码和部分资源;否则返回200状态码和全部资源。
Referer字段
告知服务器请求的原始资源的URI
TE字段
告知服务器客户端能够处理响应的传输编码方式及相对优先级。它和首部字段Accept-Encoding的功能很像,但是用于传输编码。另外,分块传输时,Trailers字段指定传输编码后,将trailers赋值给该字段。如,TE:trailers
User-Agent字段
创建请求的浏览器和用户代理名称名称等信息。
响应首部字段
Accept-Ranges字段
告知客户端服务器能否能处理范围请求。可处理范围请求时值为bytes,反之则为none。
Age字段
告知客户端,源服务器在多久前创建了响应;单位:秒。当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了
注:代理创建响应时必须加上该首部字段。
ETag字段
告诉客户端请求资源的实体标识。
说明:ETag值,是一种可将资源以字符串形式做唯一性标识的方式。
强ETag值,不论实体发生多么细微的变化都会改变其值。
弱ETag值,只用于提示资源是否相同。只有资源发生了根本改变,产生差异时才会改变ETag值,会在字段最开始处附加W/。如,ETag:W/“123456”
Location字段
将响应接收方引导至某个与请求URI位置不同的资源。基本会与3XX状态码配合,提供重定向,另外几乎所有浏览器都会强制性的尝试对已提供的重定向资源进行访问。
Proxy-Authenticate字段
告知客户端代理服务器所要求的认证信息。
Retry-After字段
告知客户端应该在多久之后再次发送请求。
Server字段
告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
Vary字段
获取指定的请求资源。(获取指定字段的指定值)如,Vary:Accept-Language Accept-Language:en-us
WWW-Authenticate字段
用于HTTP访问认证。告知客户端用于访问请求URI所指定资源的认证方案和带参数提示的质询。状态码401响应,肯定带有此首部字段。
实体首部字段
Allow字段
告知客户端能够支持Request-URI指定资源的所有HTTP方法。
Content-Encoding字段
告知客户端和服务器对实体的主体部分选用的内容编码方式。
Content-Language字段
告知客户端实体主体使用的自然语言(指中文或者英文)。
Content-Length字段
表明了实体部分的大小(单位字节);对实体主体进行内容编码传输时,不能再使用Content-Length字段。
Content-Location字段
表明与 报文主体部分相对应的URI。
Content-MD5字段
是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达
Content-Range字段
告知客户端作为响应返回的实体的那个部分符合范围请求。
Content-Type字段
说明了实体主体内对象的媒体类型。类型/子类型 的形式赋值。
Expires字段
告知客户端资源失效的日期。(若Cache-Control有指定max-age指令时,会优先处理max-age字段)。
Last-Modified字段
指明资源最终修改的时间
服务CooKie字段
Set-Cookie字段
如,Set-Cookie:status=enable;expires=Tue,05 JUL 2011 07:26:31 GMT;path=/;domain.hackr.jp;
属性:
NAME=VALUE 赋予Cookie的名称和其值(必需项)
expires=DATE cookie的有效期(若不指定默认为浏览器关闭,服务端只能覆盖Cookie,不能删除)
path=PATH 限制cookie访问的资源路径
domain=域名 指定的域名可于其他域名结尾进行匹配。如,指定example.com后,www. example.com和www2. example.com等均可发送Cookie
secure 限制web页面仅在HTTPS安全连接时才可以发送Cookie
HttpOnly 它使得JavaScript脚本无法获取Cookie。
其他首部字段
X-Frame-Options字段
属于响应首部,用于控制网站内容在其他web网站的Frame标签内的显示问题。
DENY值代表拒绝;SAMEORIGIN值代表仅在同源域名下的页面匹配时许可。
X-XSS-Protection字段
属于响应首部,用于控制浏览器XSS防护机制的开关。0:无效 1:有效
P3P字段
属于响应首部,通过利用p3p技术,保护用户隐私。
DNT字段
属于请求首部。拒绝精准广告追踪的一种方法。0:同意被追踪 1:拒绝被追踪