在Chrome中绕过CORS问题

15

我们遇到了一个问题,使用Chrome通过XMLHTTPRequest发送请求时,会出现以下错误:

无法加载<服务器网址>:请求的资源上缺少“Access-Control-Allow-Origin”头部, 因此不允许从源“<客户端域名>”进行访问。

由于我们在IE中没有遇到这个问题,因此这个错误是与Chrome有关的。是否有任何方法可以在JavaScript中绕过此错误?


有一个名为“Allow-Control-Allow-Origin:”的Chrome扩展程序可能会有所帮助。 - stever
请在您的问题中发布相关的代码片段。 - AndrewL64
@stever 这将使请求变为OPTIONS,服务器仅支持POST。 - ak0053792
@HereticMonkey 我已经检查过了。但是它没有说明如何在JavaScript代码中跳过此步骤。 - ak0053792
对,因为在JavaScript代码中是不可能的。 - Heretic Monkey
3个回答

10

基本上,仅供开发目的,您可以使用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的仅链接答案构建,该答案因仅链接而被删除,但链接实际上帮助了我。


1
它可以正常运行(现在是2023年11月,使用Chrome 118版本),如果你想测试一些东西,它真的非常非常有用。谢谢! - undefined

5
不,幸运的是没有。同源策略是浏览器实施的安全概念,用于防止Javascript代码对与其来源不同的域进行请求。因此,允许开发人员从Javascript绕过这一点是不好的。
跨源资源共享(CORS)是一种机制,它使用额外的HTTP头告诉浏览器允许在一个起源(域)上运行的Web应用程序有权限访问来自不同起源的服务器上选择的资源。当Web应用程序请求具有与其自身起源(域、协议和端口)不同的起源时,它会进行跨源HTTP请求。
来源:跨源资源共享(CORS) 如果你控制API: 添加一个包含你的请求来源域的Access-Control-Allow-Origin头。
如果你不能控制API: 请API开发者将你的域添加到Access-Control-Allow-Origin头中。 编辑:
添加正确的标头不会使请求成为OPTIONS请求,而服务器只接受POST请求。
OPTIONS请求是预检请求,用于检查是否可以实际进行CORS调用。如果预检请求具有正确的标头,则将跟随POST请求,如下图所示:

OPTIONS before POST

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


1
添加Access-Control参数将使请求变为HTTP OPTIONS,服务器仅支持POST。 - ak0053792
1
不会的。OPTIONS请求是预检请求,用于检查CORS调用是否可以实际进行。如果预检请求具有正确的标头,则将跟随POST请求。 - rickvdbosch

0
尽管受限,但可以尝试在任何地方使用CORS https://github.com/Rob--W/cors-anywhere 或谷歌浏览器扩展程序here来绕过CORS(确保在非测试模式下关闭此功能,否则会导致来自其他网站的请求出现问题)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接