2011-07-16 11 views
19

Redbot reporta que mi página web tiene cabecera válida:Sintaxis para ETag?

sintaxis de la cabecera ETag no es válido.

Los encabezados se establecen en:

ETag: 4ae413bd 

¿Por qué es inválida?

¿Cuál es la sintaxis para una ETag?

Respuesta

26

Trate ETag: "4ae413bd". El valor de un ETag debe seguir el ABNF formulario:

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)> 

, que es básicamente ([wW]/)?"([^"]|\\")*" en regular de expresiones regulares.

Tenga en cuenta que tanto "\" como "/" son valores válidos para los etags.

Referencias: section-14.19, section-3.11, section-2.2.

+0

Aunque HTTP 1.1 permite ' "\" ', el proyecto de HTTP 1.1 bis no lo hace. En 2007, el W3C consideró este tema - vea http://www.w3.org/Protocols/HTTP/1.1/rfc2616bis/issues/#i31 - y decidió que la gramática era incorrecta. Se corrigió en el borrador 04. Puede ver la edición en http://greenbytes.de/tech/webdav/draft-lafon-rfc2616bis-04.html#rfc.issue.i31-qdtext-bnf. Por lo tanto, siempre que el HTTP 1.1 bis finalmente se envíe (suponiendo que lo haga) '" \ "' ya no será válido, por lo que sería prudente evitarlo, aunque técnicamente está permitido hoy. –

+0

@IanGriffiths, ¿cuál es la fecha de envío estimada? – Pacerier

+0

Creo que el plan es que se presente como un estándar propuesto en septiembre de 2013. (La última llamada del grupo de trabajo pertinente debía cerrarse a principios de este año, y creo que siguió adelante como estaba previsto). No creo hay un plan sobre cuánto tiempo le lleva pasar de "propuesto" a completamente desarrollado; creo que eso depende de cosas que solo se vuelven aparentes más adelante (por ejemplo, la tasa de adopción, si se encuentran problemas). –

5

"Un ETag es un identificador opaco asignado por un servidor web a una versión específica de un recurso que se encuentra en una URL". Esto significa que puede ser prácticamente cualquier cosa.

El problema es, probablemente, la sintaxis, el uso:

ETag: "4ae413bd" 
8

Como mencionó Arnaud, asegúrese de haber cotizado el valor.

reemplazar

new EntityTagHeaderValue("0"); 

con

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