在 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 问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IE 中使用 CORS 从 https 调用 http?