HTTP/1.1規範定義了以下關於具有多個報頭字段的請求:HTTP驗證:結合多個報頭
發件人必須不在消息產生多個首標字段具有相同的字段 名稱,除非或者是整個該頭字段的字段值被定義爲逗號分隔列表[即,#(值)] 或者頭部字段是衆所周知的例外(如下所述)。
接收者可以與相同的場 名稱組合多個報頭字段爲一個「字段名:字段值」對,在不改變消息的 語義,由每個隨後的字段值追加到 組合字段按逗號分隔的順序值。其中接收到具有相同字段名稱的頭字段的訂單 是 ,因此對組合字段 的解釋值有重要意義;當 轉發消息時,代理不得更改這些字段值的順序。
對於解析請求:
- 我需要首先合併標題(用逗號分隔),然後驗證該合併的頭?
或
- 我需要單獨驗證每個頭,它們合併成一個頭之前?
或
- 這是不確定的,而且我可以選擇任何選項,我喜歡?
一個實例,其中這使得有差別,是:
GET/HTTP/1.1
Host: 127.0.0.1
Upgrade: foo
Upgrade:
Upgrade: bar
在此,通過本身第二單獨報頭是無效的(作爲升級頭需要至少1協議)。但是,所有三個標頭的組合變爲允許的foo,,bar
。
當規範說明它至少需要1件東西時:這是用於完整組合標題,還是用於單獨標題?
你說「'foo,bar'這是允許的」; '升級'採用以逗號分隔的標記,而中間的空字符串不是有效的標記。你能澄清什麼可以允許嗎?否則,你提供的兩種表格都是無效的。 – Joe
@Joe - 參見https://greenbytes.de/tech/webdav/rfc7230.html#abnf.extension的末尾 –
該規範聲明「發件人不能生成空的列表元素」,但建議服務器容忍這一點(並不少見)錯誤。爲了驗證,而不是現實世界的服務器,我期望一個不太寬容的解析。 – Joe