读取响应标头的问题
Posted
技术标签:
【中文标题】读取响应标头的问题【英文标题】: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());
谢谢
【问题讨论】:
你需要在目标服务器上处理preflight requests。 【参考方案1】:CORS 确实是服务器响应的一部分,不是请求。所以你不能“设置”它在你身边。
但是,扩展程序可以绕过 CORS 限制和make cross-origin requests。但为此,您需要列出要连接到in manifest permissions 的域。安装时将警告用户您将与这些域进行交互。
例如,要允许对 http://example.com
和 https://example.com
域的请求而不考虑 CORS,您需要在清单中包含:
"permissions" : [
"*://example.com/"
],
如果您无法提前说明需要连接到哪些站点,则您要么需要所有 url 的权限(特殊权限,字面意思是 "<all_urls>"
),要么使用 Optional Permissions 在运行时请求该权限.
【讨论】:
哇.. 感谢 Xan 的帮助。我已经在权限下的清单中设置了“”,但它不起作用,但在可选权限下设置它对我有用,而且没有任何警告。非常感谢!!! 传统权限覆盖可选权限。一旦被授予,您的本地安装将授予它们 - 它会在您的安装上运行,但如果您删除并再次添加扩展程序,它将停止工作。 我所做的 Xan 在权限和可选权限中都定义了“”。即使我删除并添加扩展名,它也可以正常工作。 但是你不需要它的可选权限让它工作。你真的,真的没有。您可能只是忘记重新加载了。以上是关于读取响应标头的问题的主要内容,如果未能解决你的问题,请参考以下文章
从 API 响应读取响应标头 - Angular 5 + TypeScript