response Headers
一、Header属性
属性 备注
Access-Control-Allow-Origin 该站点可以被哪些网站进行 跨域资源共享
Access-Control-Allow-Origin: http://example.com:8080 http://foo.example.com
Access-Control-Allow-Origin:\*
------------------------------------------------------------------------------------------------------------------------------------------------
Accept-Ranges 服务器是否支持资源范围请求
资源范围请求:指按byte为单位,请求资源的某一段数据
例如请求一个文件的200byte—400byte的数据
Accept-Ranges:bytes 表示该资源支持byte形式资源范围请求
Accept-Ranges:none则表示不支持
------------------------------------------------------------------------------------------------------------------------------------------------
Age 一个资源存在于代理中 缓存的时间,单位是秒
Allow 一个资源允许哪些HTTP方法进行请求
Allow: GET, HEAD
Allow:\*
------------------------------------------------------------------------------------------------------------------------------------------------
Cache-Control
![]()
Connection 连接方式
Connection:keep-alive
Connection:close
------------------------------------------------------------------------------------------------------------------------------------------------
Content-Encoding 服务器对响应数据的编码方式,但这里的编码方式不同于编码字符集(GB2312,UTF-8等),
而是(通常)指压缩方式 Content-Encoding:gzip
------------------------------------------------------------------------------------------------------------------------------------------------
Content-Language 响应数据的自然语言 Content-Language:ZH-CN
Content-Length 响应数据的数据长度,单位是byte Content-Length:1024
Content-Location
Content-MD5 基于base64编码的回应数据的MD5校验和 Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Disposition 当客户端请求的资源是一个可下载的资源(这里的“可下载”是指浏览器会弹出下载框或者下载界 面)时,对这个可下载资源的描述(例如下载框中的文件名称)就是来源于该头域。Content- Disposition: attachment; filename=”some_app.exe”
------------------------------------------------------------------------------------------------------------------------------------------------
Content-Range 如果当前这个响应数据是整个资源的一部分时,是具体的哪一部分(从第几byte到第几byte)。
在请求中,客户端可以通过设定”Range”头域来通知服务器其只想请求整个资源中某一段数据,而 对应的,当服务器响应这种请求,并发送某一段数据到客户端的时候,必须通过Content-Range头 来告诉客户端当前的响应数据是整个资源的第几byte到第几byte。这个在资源的分段下载和续点下 载应用中很有用。Content-Range:500-900
------------------------------------------------------------------------------------------------------------------------------------------------
Content-Type 服务器告诉浏览器它发送的数据属于什么文件类型,也就是响应数据的MIME类型
Content-Type: text/html; charset=utf-8,让浏览器把接收到的实体内容以HTML格式解析
Content-Type: text/plain; charset=utf-8,让浏览器把接收到的实体内容以普通文本解析
------------------------------------------------------------------------------------------------------------------------------------------------
Date 响应消息发送的GMT格式日期 Date: Tue, 15 Nov 1994 08:12:31 GMT
ETag 资源的一个标识,类似于key-value pair(键值对)中的key。
ETag通常用于校验一个资源实体有没有被修改过。在数据缓存和PUT方法更新资源时候有用处。
ETag: “737060cd8c284d8af7ad3082f209582d”
------------------------------------------------------------------------------------------------------------------------------------------------
Expires 告诉客户端该响应数据会在指定的时间过期,通常用于给客户端缓存作为参考。
Expires: Thu, 01 Dec 1994 16:00:00 GMT
------------------------------------------------------------------------------------------------------------------------------------------------
Last-Modified 客户端所请求的资源的最后修改时间。
Link 描述当前被请求的资源和另外一个资源的关系。这种关系被定义在RFC5988。Link: ;rel=”alternate”
Location 用户通知客户端转跳(重定向)到另一个URL Location: http://www.w3.org/pub/WWW/People.html
P3P Platform for Privacy Preferences Project的缩写,表示本站点遵守P3P协议(标称本站点不会违法使 用用户信息)并希望收集用户信息。不过P3P目前使用并不广泛,特别国内并不重视P3P。 P3P:CP=”your_compact_policy”。
------------------------------------------------------------------------------------------------------------------------------------------------
Pragma 在请求/响应链上附近的一些参数
Proxy-Authenticate 访问代理时需要使用的验证方式。Proxy-Authenticate: Basic
Refresh 用于令客户端在指定N秒后转跳到另外一个URL。Refresh:6,http://www.google.com.hk 6秒后转跳 到google
------------------------------------------------------------------------------------------------------------------------------------------------
Retry-After 用于某些原因(例如该资源暂时无效)通知客户端在指定时间后重新尝试请求,时间单位为秒。
Retry-After:60 一分钟后重新尝试请求该资源。
------------------------------------------------------------------------------------------------------------------------------------------------
Server 服务器的名称 Server: Apache/2.4.1 (Unix)
Set-Cookie 对客户端设置cookie Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Strict-Transport-Security 用于指示客户端如何对HTTPS进行缓存(缓存多长时间)以及是否对子域生效。Strict-Transport- Security: max-age=16070400; includeSubDomains
------------------------------------------------------------------------------------------------------------------------------------------------
Trailer 当响应资源已chunked编码传输时,每个Chunked-Body尾部的额外数据。
Transfer-Encoding 响应内容的传输编码方式,通常有 chunked, deflate, gzip等。
Vary 用来指示缓存代理(例如squid)根据什么条件去缓存一个请求。Vary: Accept-Encoding
Vary: Accept-Encoding,User-Agent。 Vary: X-Some-Custom-Header,Host Vary: *
------------------------------------------------------------------------------------------------------------------------------------------------
Via 告诉客户端,该回应经历了那些代理。Via: 1.0 example1.com, 1.1 example2.com (Apache/1.1)
WWW-Authenticate 表示当前是用什么验证方式访问一个资源。WWW-Authenticate:base
request Headers
1、request Headers标准的请求头
- Accept : 浏览器(或者其他基于HTTP的客户端程序)可以接收的内容类型(Content-types),例如
Accept: text/plain
- **Accept-Charset:**浏览器能识别的字符集,例如
Accept-Charset: utf-8
- **Accept-Encoding:**浏览器可以处理的编码方式,注意这里的编码方式有别于字符集,这里的编码方式通常指gzip,deflate等。例如
Accept-Encoding: gzip, deflate
- **Accept-Language:**浏览器接收的语言,其实也就是用户在什么语言地区,例如简体中文的就是
Accept-Language: zh-CN
- Accept-Datetime:(这个暂时没搞清楚什么意思)
- **Authorization:**在HTTP中,服务器可以对一些资源进行认证保护,如果你要访问这些资源,就要提供用户名和密码,这个用户名和密码就是在Authorization头中附带的,格式是“username:password”字符串的base64编码,例如:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
中,basic指使用basic认证方式, QWxhZGRpbjpvcGVuIHNlc2FtZQ==使用base64解码就是Aladdin:open sesame
- **Cache-Control:**这个指令在request和response中都有,用来指示缓存系统(服务器上的,或者浏览器上的)应该怎样处理缓存,因为这个头域比较重要,特别是希望使用缓 存改善性能的时候,内容也较多,所以我想在下一篇博文中主要介绍一下
![]()
- **Connection:**告诉服务器这个user agent(通常就是浏览器)想要使用怎样的连接方式。值有keep-alive和close。http1.1默认是keep-alive。keep-alive就是浏览器和服务器 的通信连接会被持续保存,不会马上关闭,而close就会在response后马上关闭。但这里要注意一点,我们说HTTP是无状态的,跟这个是否keep-alive没有关系,不要认为keep-alive是对HTTP无状态的特性的改进。
- **Cookie:**浏览器向服务器发送请求时发送cookie,或者服务器向浏览器附加cookie,就是将cookie附近在这里的。例如:
Cookie:user=admin
- **Content-Length:**一个请求的请求体的内存长度,单位为字节(byte)。请求体是指在HTTP头结束后,两个CR-LF字符组之后的内容,常见的有POST提交的表单数据,这个Content-Length并不包含请求行和HTTP头的数据长度。
- **Content-MD5:**使用base64进行了编码的请求体的MD5校验和。例如:
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
- **Content-Type:**请求体中的内容的mime类型。通常只会用在POST和PUT方法的请求中。例如:
Content-Type: application/x-www-form-urlencoded
- **Date:**发送请求时的GMT时间。例如:
Date: Tue, 15 Nov 1994 08:12:31 GMT
- **Expect:**指示需要使用服务器某些特殊的功能。(这个我不是很清楚)
- **From:**发送这个请求的用户的email地址。例如:
From: user@example.com
- **Host:**被服务器的域名或IP地址,如果不是通用端口,还包含该端口号,例如:
Host: www.some.com:182
- **If-Match 😗*通常用在使用PUT方法对服务器资源进行更新的请求中,意思就是,询问服务器,现在正在请求的资源的tag和这个If-Match的tag相不相同,如果相同,则证明服务器上的这个资源还是旧的,现在可以被更新,如果不相同,则证明该资源被更新过,现在就不用再更新了(否则有可能覆盖掉其他人所做的更改)。
- **If-Modified-Since:**询问服务器现在正在请求的资源在某个时间以来有没有被修改过,如果没有,服务器则返回304状态来告诉浏览器使用浏览器自己本地的缓存,如果有修改过,则返回200,并发送新的资源(当然如果资源不存在,则返回404。)
- **If-None-Match:**和If-Modified-Since用意差不多,不过不是根据时间来确定,而是根据一个叫ETag的东西来确定。关于etag我想在下一篇博客介绍一下。
- **If-Range:**告诉服务器如果这个资源没有更改过(根据If-Range后面给出的Etag判断),就发送这个资源中在浏览器缺少了的某些部分给浏览器,如果该资源以及被修改过,则将整个资源重新发送一份给浏览器。
- **If-Unmodified-Since:**询问服务器现在正在请求的资源在某个时刻以来是否没有被修改过。
- **Max-Forwards:**限制请求信息在代理服务器或网关中向前传递的次数。
- **Pragma:**好像只有一个值,就是:no-cache。
Pragma:no-cache
与cache-control:no-cache
相同,只不过cache-control:no-cache
是http1.1专门指定的,而Pragma:no-cache
可以在http1.0和1.1中使用 - **Proxy-Authorization:**连接到某个代理时使用的身份认证信息,跟Authorization头差不多。例如:
Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
- **Range:**在HTTP头中,”Range”字眼都表示“资源的byte形式数据的顺序排列,并且取其某一段数据”的意思。Range头就是表示请求资源的从某个数值到某个数值间的数据,例如:Range: bytes=500-999 就是表示请求资源从500到999byte的数据。数据的分段下载和多线程下载就是利用这个实现的。
- **Referer:**指当前请求的URL是在什么地址引用的。例如在www.a.com/index.html页面中点击一个指向www.b.com的超链接,那么,这个www.b.com的请求中的Referer就是www.a.com/index.html。通常我们见到的图片防盗链就是用这个实现的。
- **Upgrade:**请求服务器更新至另外一个协议,例如:
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
- **User-Agent:**通常就是用户的浏览器相关信息。例如:
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0
- **Via:**用来记录一个请求经过了哪些代理或网关才被送到目标服务器上。例如一个请求从浏览器出发(假设使用http/1.0),发送给名为 SomeProxy的内部代理,然后被转发至www.somenet.com的公共代理(使用http/1.1),最后被转发至目标服务器www.someweb.com,那么在someweb.com中收到的via 头应该是:
via:1.0 someProxy 1.1 www.someweb.com(apache 1.1)
- **Warning:**记录一些警告信息。
2、通用但非标准的HTTP头(通常,非标准的头域都是用“X-”开头,例如”x-powered-by”)
- **X-Requested-With:**主要是用来识别ajax请求,很多javascript框架会发送这个头域(值为XMLHttpRequest)
- DNT : DO NOT TRACK的缩写,要求服务器程序不要跟踪记录用户信息。DNT: 1 (开启DNT) DNT: 0 (关闭DNT)火狐,safari,IE9都支持这个头域,并且于2011年3月7日被提交至IETF组织实现标准化
- X-Forwarded-For : 记录一个请求从客户端出发到目标服务器过程中经历的代理,或者负载平衡设备的IP。
- **X-Forwarded-Proto:**记录一个请求一个请求最初从浏览器发出时候,是使用什么协议。因为有可能当一个请求最初和反向代理通信时,是使用https,但反向代理和服务器通信时改变成http协议,这个时候,X-Forwarded-Proto的值应该是https
- **Front-End-Https:**微软使用与其负载平衡的一个头域。