CORS跨域

First Post:

Last Update:

对于简单请求,浏览器直接发出CORS请求。具体来说,就是在头信息之中,增加一个Origin字段。

简单请求

  1. 添加一个origin字段
  2. 服务器判断origin是否被许可
  3. 不许可不添加Access-Control-Allow-Origin,否则添加
  4. 具体格式如下:
    1. Access-Control-Allow-Origin: http://api.bob.com
    2. Access-Control-Allow-Credentials: true
    3. Access-Control-Expose-Headers: FooBar
    4. Content-Type: text/html; charset=utf-8

非简单请求

  1. 预检请求:浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。
  2. 请求头格式:options表示询问, Access-Control-Request-Method:列出使用了的方法

    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…

  3. 如果否定,则服务器返回一个没有任何相关头的字段,浏览器报错

解决方法

  1. 浏览器插件
  2. 后端配置cors
  3. 如果需要cookie,需要前端一起配合