Javascript 否';访问控制允许原点';用于公共api请求

Javascript 否';访问控制允许原点';用于公共api请求,javascript,ajax,google-chrome,cors,Javascript,Ajax,Google Chrome,Cors,我试图使用javascript(在客户端)从我的网站向第三方api执行ajax请求,但收到一个“不允许访问控制允许源代码”错误。当尝试从node.js项目访问此文件时,一切正常。 此外,当打开Chrome时,禁用web安全,一切都正常工作。 请提供有关此问题的任何信息:-)如果不使用CORS,您无法访问第三方API。CORS向HTTP响应中添加特殊头(例如,访问控制允许源站)。这确保了API可以控制哪个前端可以向其发出请求。然而,这意味着您的API需要识别前端URL并接受来自它的请求 您可以(a

我试图使用javascript(在客户端)从我的网站向第三方api执行ajax请求,但收到一个“不允许访问控制允许源代码”错误。当尝试从node.js项目访问此文件时,一切正常。 此外,当打开Chrome时,禁用web安全,一切都正常工作。
请提供有关此问题的任何信息:-)

如果不使用CORS,您无法访问第三方API。CORS向HTTP响应中添加特殊头(例如,
访问控制允许源站
)。这确保了API可以控制哪个前端可以向其发出请求。然而,这意味着您的API需要识别前端URL并接受来自它的请求

您可以(a)在API端使用CORS(需要对API进行更改)或(b)使用服务器端语言发出API请求(例如,PHP向API发出请求,前端接收来自PHP后端的响应)。浏览器的安全设置禁止所有其他内容


你可以阅读更多关于CORS的内容,例如:

“公共”与此无关。我几乎没有什么难以理解的。1.如果第三方API禁用CORS,来自服务器端和客户端的请求是否会被拒绝?2.如果第三方API启用CORS,为什么来自客户端的请求将被浏览器拒绝,而来自服务器端的请求(例如PHP)将不会被拒绝?我很难理解为什么客户端(浏览器)的请求会被拒绝问题是浏览器的安全设置。浏览器不允许非同源ajax请求。只有在另一个域启用了特殊CORS设置(即明确允许您的域)的情况下,才能对另一个域进行Ajax调用。这是因为您可以轻松地从
evil.com
backend.com
发出ajax请求并附加身份验证cookie。因此,浏览器不允许您这样做。如果您使用PHP或cURL发出请求,您将不会受到与浏览器中相同域的任何限制。首先,感谢您的帮助。我只是想确认一下:1。假设我在“mydomain.com/api”上有一个服务器。因为它是一个开放的api,所以我想让客户端能够访问它,所以我对所有(*)启用CORS。即使启用了CORS,来自域的javascript命令:“otherdomain.com”也不会被批准?2.浏览器是否在将请求发送到服务器之前拒绝该请求,或服务器重新执行该请求?如果您定义CORS设置以允许API上的每个源(
*
),则它将在浏览器中工作。但是,如果您对此公共API具有身份验证,则需要确保不使用cookie(或者至少在标头中使用CSRF令牌)。如果您试图从浏览器执行跨源Ajax请求,浏览器实际上会首先进行
选项
调用,并询问服务器是否允许前端执行实际调用。浏览器评估选项调用的响应,然后根据CORS设置提出实际请求(如果允许的话)。在Google Chrome开发工具的网络选项卡中可以看到
选项
请求以及实际请求,例如
发布
请求。CORS实际上只是带有
选项的飞行前,在飞行前和实际请求中都有特殊的标题(从
访问控制-
开始)。