• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

CORS预请求

武飞扬头像
前端知识
帮助1

CORS是一个W3C标准,它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

两种请求

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

简单请求

(1) 请求方法是以下三种方法之一:

  • HEAD

  • GET

  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept

  • Accept-Language

  • Content-Language

  • Last-Event-ID

非简单请求

不是简单请求的就是 非简单请求

预检请求

非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。

发送请求:

  1.  
    var url = 'http://api.alice.com/cors';
  2.  
    var xhr = new XMLHttpRequest();
  3.  
    xhr.open('PUT', url, true);
  4.  
    xhr.setRequestHeader('X-Custom-Header', 'value');
  5.  
    xhr.send();

上面代码中,HTTP请求的方法是PUT,并且发送一个自定义头信息X-Custom-Header。

浏览器发现,这是一个非简单请求,就自动发出一个"预检"请求,要求服务器确认可以这样请求。下面是这个"预检"请求的HTTP头信息。

  1.  
    OPTIONS /cors HTTP/1.1
  2.  
    Origin: http://api.bob.com
  3.  
    Access-Control-Request-Method: PUT
  4.  
    Access-Control-Request-Headers: X-Custom-Header
  5.  
    Host: api.alice.com
  6.  
    Accept-Language: en-US
  7.  
    Connection: keep-alive
  8.  
    User-Agent: Mozilla/5.0...

服务器收到"预检"请求以后,检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应。

  1.  
    HTTP/1.1 200 OK
  2.  
    Date: Mon, 01 Dec 2008 01:15:39 GMT
  3.  
    Server: Apache/2.0.61 (Unix)
  4.  
    Access-Control-Allow-Origin: http://api.bob.com
  5.  
    Access-Control-Allow-Methods: GET, POST, PUT
  6.  
    Access-Control-Allow-Headers: X-Custom-Header
  7.  
    Content-Type: text/html; charset=utf-8
  8.  
    Content-Encoding: gzip
  9.  
    Content-Length: 0
  10.  
    Keep-Alive: timeout=2, max=100
  11.  
    Connection: Keep-Alive
  12.  
    Content-Type: text/plain

上面的HTTP回应中,关键的是Access-Control-Allow-Origin字段,表示http://api.bob.com可以请求数据。该字段也可以设为星号,表示同意任意跨源请求。

Access-Control-Allow-Origin: *

参考文档:

阮一峰cors

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbcjbf
系列文章
更多 icon
同类精品
更多 icon
继续加载