问题描述
注意
- 这个问题是关于带有
transfer-encoding
标头的请求,不是响应 - 是的,请求可以使用
transfer-encoding
标头 - 人们可以实现一个可以任何事情的网络浏览器,但就本问题而言,请将“网络浏览器”的定义限制为 Google Chrome、Mozilla Firefox、Microsoft Edge 和 Apple Safari .
背景
- 对于
XMLHttpRequest
,transfer-encoding
是 forbidden header name - 对于
fetch
,transfer-encoding
是 forbidden header name - 对于 HTML 中的链接或表单,[HTML 标准] (https://html.spec.whatwg.org/) 中没有明确提及
transfer-encoding
- 这不是权威来源,但 the PortSwigger article on request smuggling 指出“浏览器通常不会在请求中使用分块编码,它通常只出现在服务器响应中。”
- 我能找到的唯一可能使用
transfer-encoding
的参考是 Chrome 特定的 is behind an experimental flag,并且需要 a second,non-standard flag to enable it for HTTP/1.1
问题
- 是否存在网络浏览器使用
transfer-encoding
标头发出请求的情况?
解决方法
我最近一直在研究这个主题,我的理解是目前任何主流浏览器都不支持它,但它正在开发中。
Chrome 实验是第一次尝试了解它将如何在网络世界中发挥作用,因为似乎有相当多的边缘情况可能会因现有的复杂网络基础设施(负载平衡器、代理等)而出错.
我一直在阅读的主要来源是这个 fetch
's issue about readable stream support,如果您有兴趣,我建议您阅读。