响应于预检要求不经过访问控制检查(JavaScript的)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了响应于预检要求不经过访问控制检查(JavaScript的)相关的知识,希望对你有一定的参考价值。

我试图使用XMLHttpRequest来使后调用,越来越以下信息:

从原点“空”“https://some-link”访问的XMLHttpRequest已封锁CORS政策:回应预检要求未通过访问控制检查:没有“访问控制允许来源”标头出现在所请求的资源。

类似的还有线程说,以添加CORS头,其中我已经做了。

我很好奇的是,这完全一样的代码,当变成AJAX正常工作(而不必有他人办理CORS配置)。由于AJAX简单地说就是建出来的javascript框架,为什么此消息显示不AJAX编码时,和纯粹的JavaScript出来的?

var xhr = new XMLHttpRequest()
xhr.open('POST', url, true)
xhr.send(data)

$.ajax(
    type: 'POST',
    url: 'url',
    data: data
);

后者的正常工作。什么额外的/隐藏的实现是有AJAX之内?

答案

打开DOM查看器,单击该请求,并发现这两个要求之间的差异。会有差异。

这“空”的起源可能是因为您使用IFRAME与属性沙箱,对不对?为了解决这个问题,你需要确保

  • 请求的资源(网络面板)返回“访问控制允许来源”响应头中(你说你这样做)
  • 请记住,预检使用OPTIONS请求(既不会也不POST),所以要确保你的服务器发送时的资源使用OPTIONS请求中请求上述头。你应该看到在控制台选项请求一些错误信息CORS错误发生前的权利,如果是这样的话。 (例如nginx repsonds与误差405在默认情况下OPTIONS请求。)

您可以检查使用命令行卷成那样curl 'https://www.example.com/my-url-that-fails-here/' -X OPTIONS -H 'Pragma: no-cache' -H 'Access-Control-Request-Method: GET' -H 'Origin: null' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en' -H 'User-Agent: Mozilla/5.0' -H 'Accept: */*' -H 'Access-Control-Request-Headers: x-requested-with' --compressed -D - -O /dev/null这应该颇有渊源模仿真正的浏览器。

以上是关于响应于预检要求不经过访问控制检查(JavaScript的)的主要内容,如果未能解决你的问题,请参考以下文章

对预检请求的响应未通过访问控制检查错误

Sphere Engine 问题 API - 错误:对预检请求的响应未通过访问控制检查:不存在访问控制允许来源

ASP.NET Core Web API + Angular 对预检请求的响应未通过访问控制检查:预检请求不允许重定向

在禁用 Web 安全模式下运行的 chrome 中,对预检请求的响应未通过访问控制检查

“对预检请求的响应未通过访问控制检查”是啥意思?

对预检请求的响应未通过访问控制检查 - Angular 5 + JWT OAuth