本文已参与「新人创作礼」活动,一起开启掘金创作之路。
HTTP请求头(Request Header)、响应头(Response Header)参数说明和CORS的介绍。
常规消息头(General Headers)
- Connection: keep-alive | 表示是否需要持久连接
- Content-Encoding: gzip | 为消息主体中的内容指定编码形式
- Content-Length: 348 | 规定消息主体的字节长度
- Content-Type: application/x-www-form-urlencoded | 规定消息主体的内容类型
- Transfer-Encoding: 方便通过HTTP传输而对消息主体使用的任何编码,通常用它指定块编码
请求消息头(Request Headers)
- Accept: application/json, / | 告诉服务器客户端能够接收的内容类型
- Accept-Charset: iso-8859-5 | 告诉服务器客户端可以接受的字符编码集
- Accept-Encoding: compress, gzip | 告诉服务器客户端愿意接受哪些内容编码类型
- Accept-Language: en,zh | 告诉服务器客户端可接受的语言
- Accept-Ranges: bytes | 可以请求网页实体的一个或者多个子范围字段
- Referer: www.abc.com/... | 用于指示提出当前请求的原始URL
- Origin: www.abc.com | 用于指示提出请求的域(协议 + 域名 + 端口)
- Host: www.abc.com | 指定请求的服务器的域名和端口号
- User-Agent: Mozilla/5.0... | 发出请求的用户信息
- Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== | 服务器验证的授权凭证
- Cache-Control: no-cache | 指定请求和响应遵循的缓存机制
- Expect: 100-continue | 请求的特定的服务器行为
- If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT | 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码
- If-None-Match: “737060cd8c284d8af7ad3082f209582d” | 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变
- Cookie: $Version=1; Skin=new; | HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器
"预检"请求的头信息包括两个特殊字段
-
Access-Control-Request-Method: PUT | 用来列出浏览器的CORS请求会用到哪些HTTP方法
-
Access-Control-Request-Headers: X-Custom-Header | 指定浏览器CORS请求会额外发送的头信息字段
-
X-Forwarded-For:IP0, IP1, IP2 | 用来表示HTTP请求端真实 IP
响应信息头(Response Headers)
- Accept-Language: en,zh | 响应体的语言
- Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== | 返回资源的MD5校验值
- Content-Range: bytes 21010-47021/47022 | 在整个返回体中本部分的字节位置
- Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT | 请求资源的最后修改时间
- Date: Tue, 15 Nov 2010 08:12:31 GMT | 原始服务器消息发出的时间
- ETag: “737060cd8c284d8af7ad3082f209582d” | 请求变量的实体标签的当前值
- Expires: Thu, 01 Dec 2010 16:00:00 GMT | 响应过期的日期和时间
- Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 | 用于向浏览器发布cookie,浏览器会在随后的请求中将其返回给服务器
- Location:http://xxx | 用于重定向响应(那些状态码以3开头的响应)中说明重定向的目标
- Access-Control-Allow-Origin:
- Cache-Control:no-cache | 用于向浏览器传送缓存指令
CORS
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
简单请求
同时满足以下两大条件,就属于简单请求:
- 请求方法只能是以下方法:GET、HEAD、POST
- HTTP的头信息不超出以下字段:Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type。 2.1. 其中Content-Type只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
CORS请求相关的字段
- Access-Control-Allow-Origin: www.abc.com | 要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求
- Access-Control-Allow-Credentials: true | 表示是否允许发送Cookie,默认Cookie不包括在CORS请求之中
- Access-Control-Expose-Headers: FooBar | 指定XMLHttpRequest对象的getResponseHeader()方法可以拿到的字段其他字段
- Access-Control-Allow-Methods: GET, POST, PUT | 表明服务器支持的所有跨域请求的方法
- Access-Control-Request-Headers : 表示CORS上会有哪些额外的的有信息
- Access-Control-Max-Age: 1728000 | 用来指定本次预检请求的有效期,单位为秒