HTTP请求与相应头信息说明

141 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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)。

简单请求

同时满足以下两大条件,就属于简单请求:

  1. 请求方法只能是以下方法:GET、HEAD、POST
  2. 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 | 用来指定本次预检请求的有效期,单位为秒

参考

MDN web docs