【发布时间】:2012-09-20 20:40:22
【问题描述】:
我已经实现了一个 HTTP 1.1 服务器。它是一个嵌入式服务器,所以我只支持 RFC 的强制性功能。所有响应均以分块编码方式发送。 由于 HEAD 是强制性的,因此也支持它。
HEAD 是没有正文的 GET。因此,服务器正在发送如下响应以响应 HEAD 请求:
HTTP/1.1 200 OK
Server: testServer
Connection: keep-alive
Transfer-Encoding: chunked
我想知道的是必须添加一个“0\r\n”,因为它需要发出块结束的信号:
HTTP/1.1 200 OK
Server: testServer
Connection: keep-alive
Transfer-Encoding: chunked
0
我已经尝试收集了RFC中的相关部分:
“HEAD 方法与 GET 相同,只是服务器不得在响应中返回消息体。”
“对 HEAD 请求方法的所有响应都不得包含消息正文,即使实体标头字段的存在可能会让人相信它们包含。”
"1. 任何“不得”包含消息体的响应消息(例如 1xx、204 和 304 响应以及对 HEAD 请求的任何响应)始终以标头字段后的第一个空行终止,而不考虑消息中存在的实体标头字段。”
到目前为止,我知道我的第一个解决方案(没有 0)是正确的。但是使用 Transfer-encoding: chunked 发送消息似乎很奇怪,它不会以块样式 0\r\n 终止。
【问题讨论】:
-
RFC 明确告诉您不能包含正文,“即使实体标头字段的存在可能会让人相信他们这样做了”。它还能比这清楚多少?
-
您也倾向于第一个解决方案不添加 0\r\n?传输编码不是实体标头。它是一个通用标题。
标签: http embedded embeddedwebserver