0

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

4

1 回答 1

2

我猜这个问题已经解决了,因为它已经很老了,

最近我开发了一个用于流媒体视频的测试 http 服务器,我想提出我的学习,以便它可以帮助其他人。首先,“0\r\n”不是块结束的标记,分块的预告片是“0\r\n\r\n”。

对于标题,字符串应该如下所示

"HTTP/1.1 200 OK\r\n" \
"Server: testServer\r\n" \
"Connection: keep-alive\r\n" \
"Transfer-Encoding: chunked\r\n" \
"\r\n"

注意最后一个 CRLF,它表示标题的结尾。

希望这有帮助。

于 2016-11-02T04:05:40.187 回答