2011-09-05 43 views
0

我不清楚如何在HTTP中統計「Content-Length」標頭。如何在HTTP協議中配置「Content-Length」標頭

拿一個例子,

HEADER 
... 
Content-Type: text/html 
(blank line `\r\n') 
<html></html> 
(blank line `\r\n') 

這是一個工作的HTTP請求發送一個空的HTML頁面(糾正我,如果有任何問題:-))。那麼內容的長度應該是多少? 15或17(考慮標題和發送實體之間的空白行)?

在此先感謝。最好的祝福。

回答

4

根據W3 Content-Lentgth被定義爲如下:

的Content-Length的實體頭字段指示 實體主體的大小,以字節爲單位的十進制數,發送到接收方,或在 HEAD方法的情況下,將發送 的實體主體的大小具有請求GET。

據我的理解,你必須在第一次換行後計算一切。我的回答你的問題將是15然後。

+0

感謝您的快速回復。由於我現在正在從「keep-alive」連接接收數據,因此我認爲我最好將「Content-Length」字段提取爲計數器,並從實體開始讀取指定的數據字節。不幸的是,當流結束時,計數器是2而不是0.我無法弄清楚,我認爲添加劑2是用於標題和實體之間的空白行,但我找不到任何文檔糾正了我的假設。 –

+0

這就是interessting。 – powtac

+0

:-)目前,我硬編碼一個2字節的偏移量。 –

2

15是正確的答案。這是統計實體數據的END的換行符,這意味着換行符是實體的一部分,而不是http協議。 請勿計算標題和實體之間的換行符。

+0

很好的解釋!第一個換行符是HTTP規範的一部分,因此不計算它。 – powtac

+0

對不起,* \ r \ n *(實體主體末尾的那個)計數2個字節,對吧?如果我用wireshark這樣的軟件分析請求體,\ r \ n會計算兩個字節,0d 0a的HEX值,但是如果我將這些字節導出到文件中,我會看到一個^ M字符,\ r \ n只計算1個字節,所以我應該如何處理? – tonix

+0

是的,'\ r \ n'是2個字節,'0d 0a'。 '^ M'就是一些文本編輯器在本身沒有尾隨'0a'的時候顯示'0d'的方式。如果在捕獲中看到2個字節,但僅導出1個字節,則導出錯誤。這與HTTP協議本身無關 –