2012-09-20 99 views
0

我已經實現了一個HTTP 1.1服務器。它是一個嵌入式服務器,所以我只支持RFC的強制性功能。所有響應都發送分塊編碼。 由於HEAD是強制性的,因此也受支持。HTTP 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請求方法的所有響應都不能包含消息體,即使實體頭字段的存在可能導致人們相信他們會這樣做。」 「任何」不得「包含消息主體(例如1xx,204和304響應以及對HEAD請求的任何響應)的任何響應消息始終由頭之後的第一個空行終止字段,而不管消息中存在的實體標題字段。「

到目前爲止我的理解是,我的第一個解決方案(沒有0)是正確的。但是用Transfer-encoding發送一個消息似乎很奇怪:chunked不會以塊樣式0 \ r \ n結束。

+0

RFC明確告訴你不要包含主體「即使實體頭字段的存在可能導致人們相信他們這樣做」。它能得到多少清晰? – lanzz

+0

你也傾向於第一個解決方案不加0 \ r \ n?傳輸編碼不是實體頭。這是一個通用標題。 – tobias

回答

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,標題的指示其結束。

希望得到這個幫助。