读取响应标头的问题

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.comhttps://example.com 域的请求而不考虑 CORS,您需要在清单中包含:

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

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

【讨论】:

哇.. 感谢 Xan 的帮助。我已经在权限下的清单中设置了“”,但它不起作用,但在可选权限下设置它对我有用,而且没有任何警告。非常感谢!!! 传统权限覆盖可选权限。一旦被授予,您的本地安装将授予它们 - 它会在您的安装上运行,但如果您删除并再次添加扩展程序,它将停止工作。 我所做的 Xan 在权限和可选权限中都定义了“”。即使我删除并添加扩展名,它也可以正常工作。 但是你不需要它的可选权限让它工作。你真的,真的没有。您可能只是忘记重新加载了。

以上是关于读取响应标头的问题的主要内容,如果未能解决你的问题,请参考以下文章

从 API 读取响应标头

从 API 响应读取响应标头 - Angular 5 + TypeScript

从上游读取响应标头时如何修复上游发送的标头太大?

502 Bad Gateway error - 上游从上游读取响应标头时发送的标头太大

AWS Nginx“从上游读取响应标头时上游过早关闭连接”

GraphQL:无法读取 Apollo 客户端中的响应标头