绕过 Chrome 中的 CORS 问题

ak0*_*792 9 javascript google-chrome

我们面临一个问题,即通过 XMLHTTPRequest 使用 Chrome 请求失败并出现以下错误:

加载失败<server url>:请求的资源上不存在“Access-Control-Allow-Origin”标头。<client domain>因此不允许访问源“ ”。

这个错误是 Chrome 特有的,因为我们在 IE 中没有遇到这个问题。有没有办法绕过 JavaScript 中的这个错误。

Mar*_*cel 11

基本上,仅出于开发目的,您可以使用以下标志以轻松模式启动 Chrome 浏览器disable-web-security:

以下是在 Windows 上执行此操作的方法(来源https://alfilatov.com/posts/run-chrome-without-cors/)

  • 右键桌面,添加新快捷方式
  • 将目标添加为“[PATH_TO_CHROME]\chrome.exe” --disable-web-security --disable-gpu --user-data-dir=~/chromeTemp
  • 单击“确定”。

“user-data-dir”中的目录必须具有 Chrome 的读/写权限。

您将在 Chrome 中收到一个警告横幅,通知您安全性降低,因为这实际上就是您在这里看到的。仅用于测试。

注意:这个答案建立在 Franco Fontana 的仅链接答案的基础上,该答案因仅链接而被删除,但该链接实际上对我有帮助。


ric*_*sch 6

不,幸运的是没有。

同源策略是浏览器实现的一种安全概念,用于防止 Javascript 代码针对与其提供服务的源/域不同的源/域发出请求。因此,让开发人员能够从 Javascript 中绕过这一点将是一件坏事。

跨源资源共享 (CORS) 是一种机制,它使用额外的 HTTP 标头来告诉浏览器让在一个源(域)运行的 Web 应用程序有权从不同源的服务器访问选定的资源。当 Web 应用程序请求与自身来源不同的来源(域、协议和端口)的资源时,Web 应用程序会发出跨来源 HTTP 请求。

来源:跨源资源共享(CORS)

如果您控制 API:
添加Access-Control-Allow-Origin包含您的请求源自的域的标头。

如果您无法控制 API:
请要求 API 开发人员将您的域添加到Access-Control-Allow-Origin标头中。

编辑:
添加正确的标头不会“使请求成为OPTIONS请求,而服务器仅接受POST”。
该OPTIONS请求是一个预检请求,用于检查CORS 调用是否确实可以进行。如果预检请求具有正确的标头,则该POST请求将如下图所示:

发布前的选项

您可以在了解 CORS一文中找到所有基本 CORS 信息