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

时间:2018-03-08 09:53:37

标签: ajax cors

尝试通过Chrome中的ajax请求访问API时,我收到以下响应:

“无法加载http://localhost:1880/api_resource:对预检请求的响应未通过访问控制检查:请求的资源上没有”Access-Control-Allow-Origin“标头。原点http://localhost:3000为因此不允许访问。“

从消息中可以看出,客户端和API都在本地运行。

据我所知,这种情况与CORS交叉来源请求有关。我发现在堆栈溢出方面存在类似的问题,但是根据这些答案,我不明白消息告诉我的内容以及它来自何处。

具体来说,我知道必须设置响应标头“Access-Control-Allow-Origin”(通常为“*”),以允许从不同的域访问API。正在提供API。但是消息似乎与请求有关,而不是与响应有关,据我所知,没有任何请求到达API。

什么是预检请求以及它是如何失败的?

2 个答案:

答案 0 :(得分:1)

正如我现在所理解的那样,现代浏览器会发出预检'在实际交叉原始请求之前请求。此预检请求使用' OPTIONS' HTTP谓词以及CORS标头Access-Control-Request-MethodAccess-Control-Request-Headers,它希望在标头中看到有效Access-Control-Allow-Origin的响应,表明服务器理解CORS协议并允许实际(GET / POST / PUT)请求。

消息"对预检请求的响应未通过访问控制检查"表示浏览器没有看到有效的" Access-Control-Allow-Origin"选项响应中的标题。

在我的情况下,这是因为服务器(实现REST API)设置为正确响应PUT和POST请求,但没有设置为响应带有CORS头的OPTIONS请求。

答案 1 :(得分:0)

在我的情况下问题是我的网站地址,我从同一台服务器调用所有api,但我收到了这个错误。

我的网址是sateh.ir 所以我的ajax请求我设置了网址:http://sateh.ir/api/ ...

收到此错误并在其上工作几个小时后,我得到了我必须将ajax网址设置为:http://www.sateh.ir/api/ ...

我不知道为什么我的网站无法理解我在同一台服务器上调用api如果我不放'www',但那是我的问题。