我正在开发一个需要通过浏览器通过JSON访问远程服务器的Web应用程序,但远程服务器不支持CORS。服务器最终将支持CORS。但是我需要浏览器在开发和测试阶段访问远程服务器。
如何让浏览器允许来自未启用CORS的服务器的响应?
较新的浏览器对跨源资源共享(CORS)具有安全限制。对于这些浏览器,如果来自服务器的响应头不包含“Access-Control-Allow-Origin:*”,则浏览器可能会引发错误,例如:
答案 0 :(得分:1)
在测试和调试中可能存在您希望允许CORS但无法更改服务器以允许CORS的情况。有几个选项可以解决这个问题。在这里,我将讨论使用Fiddler来解决这个问题。
通过使用Fiddler,我可以看到应该从支持CORS的服务器返回的结果。 “访问控制允许来源:*”
。
但是发生的问题是远程服务器没有在响应头中返回“Access-Control-Allow-Origin:*”。
为了解决这个问题,我们可以指示Fiddler将响应标题“Access-Control-Allow-Origin:*”添加到所有响应中。
要做到这一点,请打开Fiddler自定义规则(见图)。
在代码部分OnBeforeResponse
中添加以下代码static function OnBeforeResponse(oSession: Session) {
if(!oSession.oResponse.headers.Exists("Access-Control-Allow-Origin"))
{
oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
}
现在,您的浏览器应该能够访问不支持CORS的服务器。此解决方案的一个问题是您必须运行Fiddler。
答案 1 :(得分:1)
我最近遇到了同样的问题..所以添加了一个中间服务器并使该服务器与cors不支持的服务器进行通信。因为cors仅被浏览器阻止,所以我正在从中间服务器进行此调用并绕过问题。
https://gist.github.com/HarishAtGitHub/c2fd954f377a895473c5
这个想法是这样的: 如果您正在与之通信的服务器不支持cors,请引入支持cors的中间服务器,并从中间服务器调用不支持cors的服务器。 它对我来说就像一个魅力。
在那个剧本中 https://cors-unsupported-server - cors不支持的服务器 脚本interimserver.py - cors支持中间服务器
你必须调用localhost:5000 / orc并提交请求(注意:如果你希望其他人只是将httpmethod改为所需的那个,那么脚本只有帖子)。 临时服务器会将其转发给不受支持的服务器,并获得回复并将其转发给您。
故事的道德:
只有浏览器端脚本需要遵守规则(因为broswer以执行一些额外的操作(如设置HOST头)的形式强加规则。(此HOST头是告诉服务器请求来自哪里的。如果您可以更改这个主机是cors-unsupported服务器的主机,也可以工作。[如何确认?将我的脚本中的HOST头设置为域而不是cors-unsupported服务器,你看到脚本甚至失败。现在设置它对于cors-unsupported服务器,你会发现它正常工作。])。
我的服务器端脚本不遵守浏览器规则。我会做任何事。
答案 2 :(得分:1)
尽管这是一个古老的问题,但我希望此答案对寻求避免CORS政策的廉价临时补丁的人有所帮助。
如果您使用的是Google Chrome浏览器,则可以使用一个命令行选项来禁用CORS限制。 只需创建一个新的纯文本文件并将其放入:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --disable-gpu --user-data-dir=~/chromeTemp
只需在Windows中将此文件另存为 something.bat ,即可简化其使用。或者,您可以直接在终端中使用修饰符(对于Windows / unix环境均适用)。
重要的旁注: 对于开发环境而言,这只是一种廉价,快速且肮脏的解决方法。对于生产环境或用户,请不要考虑这种可能性。 修复CORS的最佳方法是在服务器端真正修复CORS标头。