HTTP HEAD分块编码

时间:2012-09-20 20:40:23

标签: http embedded embeddedwebserver

我已经实现了HTTP 1.1服务器。它是一个嵌入式服务器,因此我只支持RFC的强制功能。所有响应都以chunked编码的形式发送。 由于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终止。

1 个答案:

答案 0 :(得分:1)

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

最近我开发了一个用于流视频的测试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,它表示标题的结尾。

希望得到这个帮助。