【问题标题】:Issue with reading Response headers读取响应标头的问题
【发布时间】:2017-04-02 06:49:32
【问题描述】:

我正在尝试构建一个 chrome 扩展,我需要 ping 到不同的机器。我尝试使用的代码能够读取 https 站点的响应标头,但不能读取 http。我是 Javascripting 的新手。任何帮助都会很棒。我知道这是一个 CORS 问题,并尝试在客户端代码中设置标头。许多论坛都提到它设置了服务器端,但在这种情况下我可以在哪里做呢?请在快照中找到下面的代码以及从 https 站点返回的插件 UI 和响应。

代码--

url="https://www.icicibank.com/";
//url = "www.rediff.com/";  
ping = new XMLHttpRequest(); 
ping.open("get", url,true);
//ping.setRequestHeader("Access-Control-Allow-Origin","*"); 
// ping.setRequestHeader("Access-Control-Allow-Credentials", "true");
ping.send(null)
ping.onreadystatechange=function() {
if (ping.readyState==4) {
alert(ping.getAllResponseHeaders());
//alertify.alert(ping.getAllResponseHeaders());
}
}

谢谢

【问题讨论】:

标签: javascript google-chrome google-chrome-extension cors same-origin-policy


【解决方案1】:

CORS 确实是服务器响应的一部分,不是请求。所以你不能“设置”它在你身边。

但是,扩展程序可以绕过 CORS 限制和make cross-origin requests。但为此,您需要列出要连接到in manifest permissions 的域。安装时将警告用户您将与这些域进行交互。

例如,要允许对 http://example.comhttps://example.com 域的请求而不考虑 CORS,您需要在清单中包含:

"permissions" : [
  "*://example.com/"
],

如果您无法提前说明需要连接到哪些站点,则您要么需要所有 url 的权限(特殊权限,字面意思是 "<all_urls>"),要么使用 Optional Permissions 在运行时请求该权限.

【讨论】:

  • 哇.. 感谢 Xan 的帮助。我已经在权限下的清单中设置了“”,但它不起作用,但在可选权限下设置它对我有用,而且没有任何警告。非常感谢!!!
  • 传统权限覆盖可选权限。一旦被授予,您的本地安装将授予它们 - 它会在您的安装上运行,但如果您删除并再次添加扩展程序,它将停止工作。
  • 我所做的 Xan 在权限和可选权限中都定义了“”。即使我删除并添加扩展名,它也可以正常工作。
  • 但是你不需要它的可选权限让它工作。你真的,真的没有。您可能只是忘记重新加载了。
猜你喜欢
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 2018-04-19
  • 2020-05-26
  • 2018-06-19
  • 1970-01-01
  • 2019-10-27
  • 2019-12-21
相关资源
最近更新 更多