如果我的HTTP服务器获得带有“Connection:keep-alive”标头的HTTP / 1.0请求,那么客户是否理解“Transfer-Encoding:chunked”是否公平?
本质上,我正在尝试决定是否尊重HTTP / 1.0客户端的“Connection:keep-alive”标头。如果我确实尊重它,那么我必须使用分块编码进行回复,因为我无法缓冲整个回复以计算Content-Length标头。
如果期望请求“Connection:keep-alive”的HTTP / 1.0客户端也理解分块编码是不安全的,那么我将不得不在每次回复后关闭连接。 (或者我错过了什么?)
这是一个明确的“号”从规范中引用:
但是,与HTTP / 1.0客户端的持久连接不能使用分块传输编码,因此必须使用Content-Length来标记每个消息的结束边界。
HTTP 1.0中不能进行分块传输编码。具有分块传输编码的保持活动请求实际上是HTTP 1.0和1.1之间的定义差异之一。
为了使服务器能够使用并非所有客户端都支持的功能,例如保持活动或分块传输编码,它必须在开始响应之前知道客户端与该功能兼容,因为没有正在进行的初始请求后客户端和服务器之间的双向通信。
绝对不是,因为Transfer-Encoding
仅在HTTP 1.1中。鉴于您的情况,我认为您不能真正支持HTTP 1.0客户端的Connection: keep-alive
标头(对于您的用例,HTTP 1.0支持它)。您应该忽略它并关闭连接。你可以安全地做到这一点,因为它只是一个优化。