在 Chrome 中绕过 CORS 问题 [重复]

Posted

技术标签:

【中文标题】在 Chrome 中绕过 CORS 问题 [重复]【英文标题】:Bypassing CORS issue in Chrome [duplicate] 【发布时间】:2019-06-30 23:47:32 【问题描述】:

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

无法加载<server url>:没有“Access-Control-Allow-Origin”标头 存在于请求的资源上。原点“<client domain>”是 因此不允许访问。

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

【问题讨论】:

有一个 Chrome 扩展“Allow-Control-Allow-Origin:”可能会有所帮助。 请在您的问题中发布相关代码sn-ps。 @stever 这将使请求成为 OPTIONS,服务器只支持 POST @HereticMonkey 我已经检查过了。但是它没有说明如何在 javascript 代码中跳过它。 对,因为这在 JavaScript 代码中是不可能的。 【参考方案1】:

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

这是在 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 的仅链接答案,该答案因仅链接而被删除,但该链接实际上对我有所帮助。

【讨论】:

【参考方案2】:

没有,幸好没有。

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

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

来源:Cross-Origin Resource Sharing (CORS)

如果您可以控制 API: 添加一个 Access-Control-Allow-Origin 标头,其中包含您的请求源自的域。

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

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

您可以在文章Understanding CORS中找到所有基本的CORS信息

【讨论】:

添加 Access-Control 参数将使请求成为 HTTP OPTIONS 并且服务器只支持 POST。 不,不会。 OPTIONS 请求是 preflight request,用于检查是否可以实际进行 CORS 调用。如果预检请求具有正确的标头,POST 请求将紧随其后。【参考方案3】:

虽然它有限,但可以尝试在任何地方使用 CORS https://github.com/Rob--W/cors-anywhere 或允许您绕过 CORS 的 chrome 扩展程序 here(确保在不测试时将其关闭,因为它会导致来自其他网站的请求出现问题)

【讨论】:

以上是关于在 Chrome 中绕过 CORS 问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法在任何浏览器中绕过 CORS 2017 年 12 月

CORS:PHP绕过不起作用

cors / ajax 请求的重复 OPTIONS 请求

如何在 IE 中使用 CORS 从 https 调用 http?

如何绕过 CORS 并从 CORS 阻止的 API 获取数据?

如何通过我的 api 调用绕过 CORS 限制? [复制]