2011-07-16 35 views
19

Redbot報道說我的網頁上有無效頭:ETag的語法?

的eTag標頭的語法無效。

我的頭被設置爲:

ETag: 4ae413bd 

爲什麼無效?

ETag的語法是什麼?

回答

26

嘗試ETag: "4ae413bd"。 一個ETag的值必須遵循ABNF形式:

entity-tag = [ weak ] opaque-tag 
    weak  = "W/" 
    opaque-tag = quoted-string 

    quoted-string = (<"> *(qdtext | quoted-pair) <">) 
    qdtext   = <any TEXT except <">> 
    quoted-pair = "\" CHAR 
    CHAR   = <any US-ASCII character (octets 0 - 127)> 
    TEXT   = <any OCTET except CTLs, but including LWS> 
    OCTET   = <any 8-bit sequence of data> 
    LWS   = [CRLF] 1*(SP | HT) 
    CTL   = <any US-ASCII control character (octets 0 - 31) and DEL (127)> 
    CRLF   = CR LF 
    CR    = <US-ASCII CR, carriage return (13)> 
    LF    = <US-ASCII LF, linefeed (10)> 
    SP    = <US-ASCII SP, space (32)> 
    HT    = <US-ASCII HT, horizontal-tab (9)> 

,這基本上是在([wW]/)?"([^"]|\\")*"定期正則表達式。

請注意,"\""/"都是etags的有效值。

參考文獻:section-14.19section-3.11section-2.2

+0

取代

new EntityTagHeaderValue("0"); 

雖然HTTP 1.1允許' 「\」',HTTP 1.1之二的草案沒有。在2007年,W3C考慮了這個問題 - 請參閱http://www.w3.org/Protocols/HTTP/1.1/rfc2616bis/issues/#i31 - 並決定該語法錯誤。它已在草稿04中修復。您可以在http://greenbytes.de/tech/webdav/draft-lafon-rfc2616bis-04.html#rfc.issue.i31-qdtext-bnf上看到該編輯。因此,無論何時HTTP 1.1 bis最終發佈(假設它),「\」將不再有效,因此儘管今天技術上允許,但避免它是明智的。 –

+0

@ IanGriffiths,預計出貨日期是多少? – Pacerier

+0

我認爲該計劃將於2013年9月作爲提議的標準提交。(相關工作組的最後一次電話會在今年早些時候結束,我認爲這樣做按計劃進行。)我不認爲有一個計劃,它需要多長時間才能從「提議」轉變爲完全成熟 - 我認爲這取決於後來才變得明顯的事情(例如,採用率,是否發現問題)。 –

5

「一個ETag是一個不透明標識符由網絡服務器分配給在URL找到的特定版本的資源」。這意味着它可以是任何東西。

這個問題可能是語法,使用:

ETag: "4ae413bd" 
8

正如阿爾諾所說,確保您已經引用了該值。

new EntityTagHeaderValue("\"0\"");