如何在HTTP Body流期间/之后发送HTTP标头?这方面有规范工作吗?

How to send HTTP Headers during/after HTTP Body stream? Is there spec work on this?

提问人:brillout 提问时间:5/12/2022 更新时间:5/16/2022 访问量:1502

问:

今天,在将 HTTP 正文的单个位发送到浏览器之前,都需要发送 HTTP 标头。

这在 React 18 Streaming 等新技术中尤其成问题,其中某些标头(例如缓存标头和 )只能在 HTTP 流的末尾确定。理想情况下,这些延迟的标头将在结束流之前发送到浏览器。103 Early Hints

规范工作组或浏览器供应商是否努力使标头能够在 HTTP 正文期间/之后发送?

经过研究,似乎没有关于此的规范工作,但我想知道是否有浏览器供应商正在研究这个问题?(一些浏览器用户在 StackOverflow 上很活跃。

上下文:我是 vite-plugin-ssrreact-streaming 的作者。

http-headers 服务器端渲染 http-streaming react-18

评论


答:

4赞 Richard Woods 5/16/2022 #1

有一个用于分块编码(Http 1.1、https://httpwg.org/specs/rfc7230.html#header.trailer)的 Trailer 字段规范。

HTTP2 规范(不支持分块编码)直接允许在包含 http 正文 https://datatracker.ietf.org/doc/html/rfc7540#section-8.1 的数据帧后面有一个标头帧。

库支持可能会有所不同,因为大多数 http 库都试图抽象出底层协议中的差异。在 Javascript 中,您将对在跨浏览器标准 fetch API 中启用尾随标头感兴趣。MDN 文档建议支持引用对象上的字段:https://developer.mozilla.org/en-US/docs/Web/API/ResponsetrailersResponse

评论

0赞 brillout 5/17/2022
截至最近(2022 年 5 月),所有浏览器供应商似乎都支持 Trailer 标头:stackoverflow.com/a/72271958/270274。Node.js似乎也支持它:nodejs.org/api/http2.html#responseaddtrailersheaders