2016-05-03 67 views
0

如果有多個內容長度頭,我應該多個內容長度頭和多個傳輸編碼頭

  1. 失敗(我不這麼認爲嗎?)
  2. 使用第一個,
  3. 使用最後一個

然後我對transfer_encoding標題也有同樣的問題。我認爲用transfer_encoding我們應該使用最後一個。

然後,'Host'標題也是同樣的問題。

感謝, 迪安

回答

0

Content-Length是一個單頭值。通常最後的標題將有權限;然而RFC 7230, section 3.3.2狀態:

如果接收到消息,其具有與由相同的十進制值,或與含有的列表的字段值的單個Content-Length頭字段的字段值的多個內容長度報頭字段指示重複的Content-Length頭部字段已由上游消息處理器生成或組合,則接收方必須將該消息拒絕爲無效或替換重複的內容長度(例如,「內容長度:42,42」)在確定消息正文長度或轉發消息之前,使用包含該十進制值的單個有效Content-Length字段確定字段值。

Transfer-Encoding是因爲它是含有列表另當別論。可以有多個,都是有效的。這裏重要的是,應用編碼必須按照它們的應用順序列出。例如。如果內容已經被gzip壓縮,然後塊編碼,頭部有看起來像

Transfer-Encoding: gzip, chunked 

Transfer-Encoding: gzip 
Transfer-Encoding: chunked 
+0

「語義上最後一個是覆蓋任何以前的標題。」 - 沒有人定義過。你也可以說「任何重複被忽略」 –

+0

@JulianReschke「任何重複都被忽略」,這實際上是不一樣的。我過去處理這種情況的方式是忽略所有以前的標題,有效地讓最後一個擁有權限。更新我的答案,順便說一句。 – DaSourcerer

+0

這是我的觀點;使用最後一個沒有比使用第一個(或隨機一個ftm)更明顯 –

2

WRT的Content-Length:是的,你實際上必須失敗(除非這兩個值是相同的,在這種情況下,你可以選擇一個)。參見RFC 7230.

「傳輸編碼」的不同之處在於它允許多個值;所以你必須按順序處理它們。