CORS 中的POST and OPTIONS 请求

Posted 雨翼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CORS 中的POST and OPTIONS 请求相关的知识,希望对你有一定的参考价值。

var req = new XMLHttpRequest();
  req.open(‘post‘, ‘http://127.0.0.1:3001/user‘, true);
  req.setRequestHeader(‘Content-Type‘, ‘application/json‘);
  req.send(‘{"name":"tobi","species":"ferret"}‘);

此Ajax 跨域访问post 请求,但是在服务器却得到的总是options请求 (req.method==‘OPTIONS’) 不知为何啊?

 

因为此post请求的 content-type不是one of the “application/x-www-form-urlencoded, multipart/form-data, or text/plain”, 所以Preflighted requests被发起。 “preflighted” requests first send an HTTP OPTIONS request header to the resource on the other domain, in order to determine whether the actual request is safe to send. 然后得到服务器response许可之后, res.set(‘Access-Control-Allow-Origin’, ‘http://127.0.0.1:3000’); res.set(‘Access-Control-Allow-Methods’, ‘GET, POST, OPTIONS’); res.set(‘Access-Control-Allow-Headers’, ‘X-Requested-With, Content-Type’); 再发起其post请求。 https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

以上是关于CORS 中的POST and OPTIONS 请求的主要内容,如果未能解决你的问题,请参考以下文章

ZF2中的CORS POST请求变成OPTIONS请求

CORS 在 web api 中的 POST 失败

Axios 中的 Cors OPTIONS 方法在 Laravel 和 Nginx 中失败

Haskell Yesod - 执行 POST 请求时浏览器 OPTIONS 请求的 CORS 问题

浏览器向 django 发出 CORS 请求的 OPTIONS 请求,但没有 POST

CORS:成功 OPTIONS 请求后,Firefox 不发送 POST 请求……在 Chrome 中有效