CORS权限控制

CORS权限控制

CORS是一种新的数据交互标准。

依旧是XHR请求,但是克服了ajax的跨域问题。

请求类别

CORS主要分为两种请求方式:简单请求和非简单请求

只要满足两个条件就是简单请求:

  1. 请求的方法是HEAD或GET或POST

  2. HTTP的头部信息不超出以下字段:Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type

其中Content-Type的值只可以是application/x-www-form-urlencoded、multipart/form-data、text/plain.

其余都是非简单请求

简单请求 simple request

浏览器发起一个简单请求,在头信息中多加了一个Origin字段。

GET /cors HTTP/1.1
Origin: http://api.bob.com
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

服务器依据设置判断是否允许来自Origin的地址的访问,如果允许就返回请求的值。

Access-Control-Allow-Origin: http://api.bob.com

返回的值中会有Access-Control-Allow-Origin字段,代表允许的地址值。

Access-Control-Allow-Origin 可以设置为 * ,代表允许任何地址访问。

非简单请求

发起非简单请求时,浏览器会先发起依次预检请求,检查Origin、Access-Control-Request-Method和Access-Control-Request-Headers之后,做出回应。

xhr.setRequestHeader('X-Custom-Header', 'value'); //xhr请求中自定义的头部字段

OPTIONS /cors HTTP/1.1
Origin: http://api.bob.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: X-Custom-Header //包含的头部自定义字段
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

预检请求的回应

HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:15:39 GMT
Server: Apache/2.0.61 (Unix)
Access-Control-Allow-Origin: http://api.bob.com // 允许的地址
Access-Control-Allow-Methods: GET, POST, PUT // 允许的方法
Access-Control-Allow-Headers: X-Custom-Header // 允许的头部自定义字段
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Content-Length: 0
Keep-Alive: timeout=2, max=100 // max代表此条预检请求有效期为100s,此期间内无需发起预检请求。
Connection: Keep-Alive
Content-Type: text/plain
posted @ 2017-09-11 10:02  慕迪亚  阅读(444)  评论(0编辑  收藏  举报
你的浏览器不支持canvas