HTTP的各类首部(Header)

共四种首部

  • 通用首部
  • 请求首部
  • 响应首部
  • 实体首部
  • 非HTTP/1.1首部

非HTTP/1.1首部

Set-Cookie
  • name=value
  • expires=日期时间。若是不指定,则默认为浏览器关闭为止。一旦发送到客户端就脱离了服务器的控制,服务端没法删除,只能覆盖。
  • path=PATH 缓存的做用对象
  • domain=域名 缓存做用的域名,不指定则为建立Cookie的服务器
  • Secure 只在https中才发送Cookie
  • HttpOnly Cookie不能被js访问,防止XSS攻击。
  • status=enable/disable
Cookie

Cookie: k=v;k2=v3html

Content-Disposition

Content-Disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。
Content-Disposition: attachment 以附件形式下载。算法

X-Frame-Options

属于响应首部
控制内容在其余Web网站的Frame标签的显示问题。浏览器

  • DENY 拒绝,不容许其余站点Frame中引用
  • SAMEORIGIN 同源策略

不指定的话,能够随便引用。缓存

X-XSS-Proterction

属于响应首部服务器

  • 0 不保护
  • 1 保护
DNT

属于请求首部,"Do Not Track"的缩写网络

  • 0 能够被追踪
  • 1 拒绝被追踪
P3P

响应首部,“The Platform for Privacy Preferences” 隐私偏好平台dom

根据是不是定义缓存代理的行为,分为两种、

  • 端到端首部 End-to-end Header: 这类首部在转发时必须带着。
  • 逐跳首部 Hop-by-hop Header:这类首部只对单次转发有效,会因为代理存在而再也不转发。

逐跳首部:ide

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Proxy-Authorization
  • Trailer
  • TE
  • Transfer-Encoding
  • Upgrade

==注意下文中的[]内的Q和R,分别表示指令可用于请求中或响应中。==网站

通用首部

Cache-Control

控制缓存服务器!编码

  • public [R]公有缓存
  • private [R]私有缓存,特定用户的缓存
  • no-cache [QR]强制再次向源服务器验证
  • no-store [QR]不缓存
  • max-age [QR]缓存时间,单位秒
  • s-max-age [R]缓存时间,单位秒
  • max-stale [Q]过时时间只要不超过max-stale就能够接受。
  • min-fresh [Q]只在请求中。若是缓存还有不到min-fresh的有效期,我就不要了,给我最新的,即当前时间+min-fresh > 过时时间,则给我新的。
  • only-if-cached [Q]只返回缓存,若是没有返回504 Gateway Timeout
  • must-revalidate [R]必须再次验证,若是没法连用源服务器,返回504。此指令会忽略max-stale。
  • proxy-revalidate [R]客户端要求代理服务器必须再次验证。
  • no-transform [QR]不容许缓存服务器改变媒体类型,好比压缩图片等。
  • cache-extension [QR]扩展指令。
Connection
控制再也不转发的首部

Upgrade: HTTP/1.1
Connection: Upgrade
表示转发时去掉Upgrade首部!

管理持久链接

Connection: Keep-Alive
关闭链接 Connection: Close

Date

此http报文的建立日期

Pragma

虽然属于通用首部,但只做用在发送请求时。

客户端要求不接受缓存,须要怎么设置?
若是中间服务器的版本都是HTTP/1.1,只使用Cache-Control: no-cache便可。了解全部中间服务器的版本不太现实,因此最好加上
Pragma: no-cache。

Trailer 拖挂

用于分块传输编码中,在报文主体后能够拖挂首部。为何要将首部放在主体后面呢?

  • 拖挂的内容是可选的元数据,客户端不必定须要理解和使用(客户端能够忽略并丢弃拖挂中的内容)。
  • trailer首部是在最初的分块编码被加入到 HTTP/1.1 规范的草案以后才加入的,所以有些应用程序可能不理解这个首部
  • 拖挂中能够包含附带的首部字段,它们的值在报文开始的时候多是没法肯定的(例如,必需要先生成主体的内容)。Content-MD5 首部就是一个能够在拖挂中发送的首部,由于在文档生成以前,很难算出它的 MD5。
  • 除了 Transfer-Encoding、Trailer 以及 Content-Length 首部以外,其余 HTTP 首部均可以做为拖挂发送。
Transfer-Encoding: chunked
Trailer: Expires
(主体)
0
Expires: <日期时间>
Transfer-Encoding: chunked
Trailer: Content-MD5
(主体)
0
Content-MD5: xxxxx
Transfer-Encoding: chunked

只用于分块传输编码中!

Upgrade

属于逐跳首部,用于指定一个彻底不一样的通讯协议,好比TLS/1.0、WebSocket等
服务器会返回101 Switching Protocols

Via

用于追踪传输路径,每通过一个代理,会追加代理服务器信息。
还能够避免请求回环的发生,因此在通过代理时必须附加此首部。
通常和Trace方法和Max-Forwards首部一块儿使用。

Warning

告知用户一些与缓存相关的警告信息。

请求首部

Accept

客户端可接受的文件格式及其优先级

Accpet: text/html, text/plain; q=0.3
表示最好返回html格式的,若是没有的话返回text格式的也行。
能够指定权重,不指定的话默认是1.0

Accept-Charset

字符集及其优先级

iso-8859-5, unicode-1-1; q=0.8

Accept-Encoding

内容编码方式及其优先级,主要指压缩格式

Accept-Encoding: gzip

  • gzip
  • compress
  • deflate
  • identity 不压缩
Accept-Language

可接受的语言

Authorization

客户端的认证信息

Expect
From

用户的联系方式

Host

在http/1.1中惟一一个必须包含在请求中的首部
用途:当服务器部署了多个域名的Web应用时,因为到达时域名已经换成了IP,因此须要Host首部提供域名,用于区分不一样的虚拟服务器。

If-Match

If-Match: "1234"
须要配合ETag使用:html文件会标记ETAG:1234。
若是匹配上了则正常返回,若是没有没有匹配上则返回:412 Precondition Failed 前提条件失败。

下面4个都是条件请求的首部

If-None-Match
If-Modified-Since
If-Unmodified-Since
If-Range

若是匹配上则执行范围请求,不然返回所有页面。

配合Range使用 Range: bytes=5001-10000

Max-Forwards

与Trace方法一块儿使用,控制通过的服务器的最大数目。

Referer

请求的原始URI

TE

两个做用:

  1. 客户端可以处理的编码方式及其优先级(压缩)

TE: gzip. deflate;q=0.5

  1. 配合实现分块传输编码

TE: trailers, chunked

User-Agent

客户端信息

响应首部

Accept-Ranges
  • bytes 支持范围请求
  • none 不支持范围请求
Age

主要用于缓存代理服务器,代理服务器必须返回此首部
用于指示缓存是多久以前确认过的,单位秒

ETag

实体的标识
Etag有强弱之分
强Etag值:微小的变化也会改变其值
弱Etag值:只有发生根本性变化才会改变,这时会以在开头附加 W/

Location

配合重定向状态,将页面引导到新的页面。

Proxy-Authenticate

代理认证

WWW-Authenticate

服务器认证

Retry-After

提示多久以后再重试请求,配合503服务不可用使用。

Server

服务器信息

Vary

提示缓存服务器,当什么首部相同时才返回缓存,若是不一样,即便是请求的资源命中缓存也不使用!
Vary: Accept-Language 接收语言相同时才返回缓存。

实体首部

Allow

用于响应时,表达服务器容许的HTTP方法
若是不匹配,返回405 Method Not Allowed

Content-Encoding

代表对方我已经按照这种编码方式进行了压缩。

Content-Language

告知客户端内容的语言

Content-Length

代表实体的主体部分的大小,单位是字节。
若是使用了内容编码传输(Content-Encoding)时,不能再使用此首部,由于已经进行了压缩。

Content-Location

主体内容的URI

Content-MD5

客户端会对接收的主体执行相同的MD5算法,Base64,比较值是否相等。
HTTP首部不接受二进制值!
此机制是没法防止恶意篡改的,只能防止网络意外出错的验证。

Content-Range

Content-Range: bytes 5001-10000/10000

Content-Type

媒体类型
Content-Type: text/html; charset=UTF-8

Expires

服务器告诉缓存服务器,能够此资源缓存的截止时间
当无须要缓存时,将此值与Date首部的值设置成同样的。

缓存有效期的优先级:

  • http1.0版本: s-maxage > Expires > max-age
  • http1.1版本: s-maxage > max-age > Expires
相关文章
相关标签/搜索