我已经实现了一个 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 终止。