HTTP HEAD已分块编码



我已经实现了一个HTTP1.1服务器。它是一个嵌入式服务器,所以我只支持RFC的强制性功能。所有响应都是按块编码发送的。由于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编码发送消息似乎很奇怪:chunked并没有以chunk样式0\r\n终止。

我想所说的问题已经解决了,因为它很旧,

最近,我开发了一个用于流媒体视频的测试http服务器,我想把我学到的东西展示出来,这样它就可以帮助其他人。首先,"0\r\n"不是块结束的标记,块尾为"0\r\n\r\n"。

对于标题,字符串应该看起来像这个

"HTTP/1.1 200 OKrn" 
"Server: testServerrn" 
"Connection: keep-alivern" 
"Transfer-Encoding: chunkedrn" 
"rn"

注意最后一个CRLF,它表示标头的末尾。

希望得到帮助。

最新更新