2010-07-13 105 views
36

據我所知,HTTP規範允許設置多個具有相同名稱的HTTP頭。是否有任何用例可以這樣做(從客戶端到服務器,反之亦然)?設置多個具有相同名稱的HTTP標頭?

HTTP 1.1 Section 4.2

多個與 消息的報頭字段當且僅當該頭字段整個 字段值是 定義爲相同的字段名可以存在於 消息逗號分隔列表 [即,#(值)]。它必須能夠 到所述多個報頭字段 組合成一個「字段名:字段值」 對,在不改變的語義信息的 ,由每個 後續字段值附加到所述第一, 每個分離以逗號分隔。因此 在其中接收到具有相同的 字段名的報頭字段的順序 是的 解釋合併的字段值顯著,因此當消息是 一個 代理不能改變的 這些字段值的順序轉發。

如果我沒有錯,就不需要多個名稱相同的頭文件。

+3

「如果我沒有錯,就不需要多個名稱相同的頭文件。」 - 你說的沒錯,而且根據你和原始頭文件之間的技術情況,它不會被正確支持。 – heisenberg 2010-07-14 13:12:52

+5

我看過重複標題的唯一時間是'Set-Cookie:'。 – TRiG 2011-04-28 16:10:20

+0

相關問題:[是否可以接受重複的HTTP響應頭?](http://stackoverflow.com/questions/4371328/are-duplicate-http-response-headers-acceptable)。標題名稱的WebDAV標頭是[另一個示例](https://github.com/joyent/node/issues/2750)重複項。 – chrisjleu 2014-12-14 10:44:20

回答

17

由於重複標題可能會導致各種網絡服務器和API(無論規範說什麼)的問題,我懷疑這是最佳實踐中的任何通用用例。當然,這並不是說某個地方沒有做到這一點。

+0

消息格式和API有不同的要求... – 2010-07-14 05:14:17

+0

內容安全策略旨在處理多個頭。請參閱https://twitter.com/mikewest/status/841892857736765443,這會導致問題。 – oreoshake 2017-04-12 19:51:13

4

它只允許使用非常特定的格式,請參閱RFC 2616, Section 4.2

+0

他在問題中表達得很清楚,他意識到自己被允許,這不是他所要求的。 – heisenberg 2010-07-14 13:13:32

+6

該鏈接雖然非常有幫助。特別是出現多次頭部的部分,也必須能夠用逗號分隔的值表示爲單個頭部。 – nategood 2012-09-15 15:16:43

30

它通常用於Set-Cookie:。許多服務器設置多個cookie。

當然,您可以將它們全部設置在一個標題中。

其實,我認爲你不能在一個頭中設置多個cookie。所以這是一個必要的用例。

Cookie spec確實權利要求,可以在一個頭中的相同的方式的其他報頭可以被組合(逗號分隔)組合多個cookies,但它也指出,不符合規定的語法(如Expires參數,其具有,其價值)仍然很普遍,必須通過實施來處理。

因此,如果您在Set-Cookie標頭中使用Expires參數,並且不希望所有Cookie同時過期,則可能需要使用多個標頭。

+0

您可以輕鬆地將它們設置在一個標頭中:Set-Cookie:hello = world; conception = proofed – BronzeByte 2012-02-15 11:50:24

+3

啊,但是你可以在同一個Header中設置不同的cookie嗎?說,你可以把它轉換成一個頭文件嗎? Set-Cookie:name1 = value1; Expires = Wed,22 Feb 2012 17:45:00 GMT Set-Cookie:name2 = value2;到期時間= Wed,2021年6月9日10:18:14 GMT – sligocki 2012-02-22 20:45:24

+0

這將在瀏覽器中保存一個名爲Expires的cookie,並被第二個覆蓋......我在此期間構建了一個服務器端會話後端,100%安全,超級簡單並且可以節省Java對象 – BronzeByte 2012-02-24 16:20:08

0

舊的線程,但我正在研究這個相同的問題。無論如何,Accept和Accept-Encoding標頭是使用多個值的逗號分隔的典型示例。即使這些是請求特定的頭文件,規範也不會區分這一級別的請求和響應。從此頁面檢查一個。 規範說的是,如果在標頭的值中有逗號作爲字符,則不能使用多個相同名稱的標頭,除非您消除使用逗號的歧義。

1

當您在尋找使用案例時,或許Accept將是有效的。

  • 接受:應用/ JSON
  • 接受:應用/ XML
-1

依我拙見,只有頭,其值可以表示(定義)用逗號分隔,可以寫成具有單個或多個值的多個標頭。

比方說,我們有一個頭可以寫在逗號分隔列表中的值。

Entries-In-Order: Jane,John,Charlie 

這頭值通過有效的定義和服務器或客戶端知道它。然後我們可以將它分開爲

Entries-In-Order: Jane,John 
Entries-In-Order: Charlie 

但是任何頭文件不明白逗號分隔值不能寫成多個。

Who-Are-Responsible: John, Jane or maybe Charlie? 

如果按照定義,服務器或客戶端可能處理整個字符串(John,Jane,maybe Charlie?)爲單一值,寫它作爲多個標頭,將無法正常工作。

My-Dummy-Header: John 
My-Dummy-header: Jane or maybe Charlie? 
+2

這不是你的意見,那是重複已經在問題中的信息。 – hobbs 2016-09-27 22:30:05

相關問題