为什么在使用 setRequestHeader 进行 xmlhttprequest 时无法设置 cookie 和 set-cookie 标头?

新手上路,请多包涵

我想知道为什么不能使用 setRequestHeader 设置 cookie 标头。是否有任何特定原因或只是它们是由浏览器本身添加的,所以这些标头被禁用了?有什么安全问题吗?

- 编辑

我正在使用 node.js 并使用 xmlhttprequest 模块。以下是测试代码:

 var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.withCredentials = true;
xhr.setRequestHeader('Cookie', "key=value");
xhr.send(null);

在这里,我需要将 cookie-header 设置为 node.js' xmlhttprequest 不要显式添加 cookie-header(如浏览器那样)。尝试这样做时, xmlhttprequest 给出错误“ Refused to set unsafe header ”。

虽然我找到了一个补丁并成功地发送了 cookie-header。但是想知道为什么它被禁用设置 cookie-header?无论我在哪里阅读,都发现它是数据完整性和安全性所必需的,但是在这种情况下可以破坏什么安全性,却没有提到。我想评估这个数据完整性问题是否对 node.js 应用程序也有效,如果我使用我的补丁。

原文由 jsist 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

我相信你会仔细阅读 工作草案 并找到

上述标头由用户代理控制,以让它控制传输的那些方面。

首先我们需要了解,这些是作为不同浏览器之间功能互操作性指南的标准。它不是浏览器强制要求的,因此浏览器确实出于不同的原因对该标准的遵守程度不同。

其次,从技术上讲,您可以模拟用户代理,将您的程序视为浏览器,并且可以根据上述标准很好地设置这些值。

最后,禁止重写标题或为某些字段设置标题的意图,例如 Content-Length , Cookie ethos the secure design approach 它是为了阻止或至少试图阻止 HTTP 请求走私

原文由 Manish Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以禁用此行为:

 var xhr = new XMLHttpRequest();
xhr.setDisableHeaderCheck(true);
xhr.open(...);
...

原文由 robertklep 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题