2
根據RFC7233,If-Range
HTTP標頭可以是實體標籤或HTTP日期。在這種情況下,RFC的3.2節指出ETag與If-Range HTTP標頭中的日期
有效實體標籤可以從有效的HTTP-日期由 來區分檢查用於DQUOTE前兩個字符。
我的問題:爲什麼我們需要兩個個字符?由於弱實體標籤在這裏是不允許的,所以我會認爲測試第一個字符是否是DQUOTE就足夠了。
根據RFC7233,If-Range
HTTP標頭可以是實體標籤或HTTP日期。在這種情況下,RFC的3.2節指出ETag與If-Range HTTP標頭中的日期
有效實體標籤可以從有效的HTTP-日期由 來區分檢查用於DQUOTE前兩個字符。
我的問題:爲什麼我們需要兩個個字符?由於弱實體標籤在這裏是不允許的,所以我會認爲測試第一個字符是否是DQUOTE就足夠了。
答案似乎是你不需要檢查兩個字符,只看第一個字符就足夠執行If-Range
。
如果你看看Apache HTTP Server的實現,你可以看到它只檢查第一個字符(http_protocol.c,在撰寫本文時爲第477行)。
if (if_range[0] == '"') {
我覺得文字的有些誤導的措辭可以通過查看HTTP 1.1規範的早期版本(RFC2616),它說來解釋:
服務器可以有效的區分HTTP日期和任何形式的 實體標籤通過檢查不超過兩個字符。
以前的陳述沒有錯,但不能立即與If-Range相關,只有強ETags是允許的。
我期望RFC7233形式的文本是試圖使前面的文本更清晰,但不幸的是,在這種情況下,它沒有達到它所尋求的清晰度。