2010-07-13 14 views
36

Por lo que sé, la especificación HTTP permite establecer más de un encabezado HTTP con el mismo nombre. ¿Hay algún caso de uso para hacerlo (de cliente a servidor y viceversa)?¿Establece más de un encabezado HTTP con el mismo nombre?

HTTP 1.1 Section 4.2:

múltiples campos de mensaje de cabecera con el mismo nombre de campo puede estar presente en un mensaje si y sólo si el entero campo-valor para ese campo de encabezado es define como una lista separada por comas [es decir, # (valores)]. TIENE que ser posible para combinar los múltiples campos de cabecera en uno "-nombre de campo: campo-valor" par, sin cambiar la semántica del mensaje, añadiendo cada subsiguiente campo-valor a la primera, cada uno separado por una coma por lo tanto El orden en el que se reciben campos de cabecera con el mismo nombre de campo es importante para la interpretación de el valor del campo combinado, y por lo tanto un proxy no debe cambiar el orden de estos valores de campo cuando un mensaje es reenviado.

Si no me equivoco, no es necesario que se necesiten varias cabeceras con el mismo nombre.

+3

"Si no me equivoco, no es necesario que se necesiten varias cabeceras con el mismo nombre". - Estás en lo cierto, y no es algo de lo que yo me convenga para que te respalden adecuadamente, dependiendo de qué tecnologías estén ubicadas entre ti y los encabezados sin formato. – heisenberg

+5

La única vez que he visto los encabezados duplicados es para 'Set-Cookie:'. – TRiG

+0

Pregunta relacionada: [¿Son aceptables los encabezados de respuesta HTTP duplicados?] (Http://stackoverflow.com/questions/4371328/are-duplicate-http-response-headers-acceptable). Los encabezados WebDAV son [otro ejemplo] (https://github.com/joyent/node/issues/2750) de los duplicados del nombre del encabezado. – chrisjleu

Respuesta

17

Dado que los encabezados duplicados pueden causar problemas con varios servidores web y API (independientemente de lo que diga la especificación), dudo que haya un caso de uso general donde esta sea la mejor práctica. Eso no quiere decir que alguien en algún lado no lo esté haciendo, por supuesto.

+0

El formato de mensaje y las API tienen requisitos diferentes ... –

+0

la política de seguridad de contenido está diseñada para manejar varios encabezados. Vea https://twitter.com/mikewest/status/841892857736765443 donde esto causa un problema. – oreoshake

4

Solo está permitido para encabezados que usan un formato muy específico, consulte RFC 2616, Section 4.2.

+0

Afirmó con bastante claridad en la pregunta que él se da cuenta que está permitido, que no es lo que está preguntando. – heisenberg

+6

Ese enlace es muy útil. Particularmente la parte que los encabezados aparecen más de una vez, también debe poder representarse como un único encabezado con valores separados por comas. – nategood

30

Se usa comúnmente para Set-Cookie:. Muchos servidores configuran más de una cookie.

Por supuesto, siempre puede configurarlas todas en un solo encabezado.

En realidad, creo que no puede establecer varias cookies en un encabezado. Entonces ese es un caso de uso necesario.

El Cookie spec hace afirman que se puede combinar múltiples galletas en una cabecera de la misma manera otras cabeceras se pueden combinar (separados por comas-), pero también señala que sintaxis no conformes (como el parámetro Expires, que tiene , s en su valor) todavía son comunes y deben ser tratados mediante implementaciones.

Por lo tanto, si utiliza los parámetros Expires en sus encabezados Set-Cookie y no desea que todas sus cookies caduquen al mismo tiempo, es probable que necesite usar varios encabezados.

+0

Puedes configurarlas fácilmente en un encabezado: Set-Cookie: hello = world; conception = proofed – BronzeByte

+3

Ah, pero ¿puede establecer cookies con diferentes caducidades en el mismo encabezado? Diga, ¿puede convertir esto en un encabezado? Set-Cookie: nombre1 = valor1; Expira = mié, 22 feb. 2012 17:45:00 GMT Set-Cookie: name2 = value2; Expira = mié, 09 de junio de 2021 10:18:14 GMT – sligocki

+0

Eso ahorraría una cookie en el navegador llamado Expires y se anularía en el segundo ..., mientras tanto, he creado un back-end para la sesión del servidor, 100% seguro, super fácil y el ahorro de objetos Java posibles – BronzeByte

0

Tema viejo, pero estaba investigando el mismo problema. De todos modos, los encabezados Accept y Accept-Encoding son ejemplos típicos que usan valores múltiples, separados por comas. Incluso si estos son encabezado específico de solicitud, las especificaciones no diferencian entre solicitud y respuesta en este nivel. Marque el de esta página. Lo que dice la especificación es que si tienes comas como carácter en el valor del encabezado, no puedes usar múltiples encabezados del mismo nombre, a menos que desambigues el uso de la coma.

1

Como está buscando casos de uso, tal vez Accept sería válido.

  • Accept: application/json
  • Accept: application/xml
-1

En mi humilde opinión, sólo aquellos encabezados, cuyo valor se puede expresar (definido) con coma separó, se puede escribir en múltiples encabezados con valores únicos o múltiples

Digamos que tenemos un encabezado cuyo valor se puede escribir en una lista separada por comas.

Entries-In-Order: Jane,John,Charlie 

Ese valor es encabezado válidos por su definición y el servidor o el cliente sabe que. Y entonces podemos separarlo como

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

Pero ninguna cabecera no entienden los valores separados por comas no se puede escribir en múltiples.

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

Si, por definición, el servidor o el cliente puede manejar toda la cadena (John,Jane,maybe Charlie?) como un único valor, escribirlo como un múltiplo cabeceras no funcionan como se esperaba.

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

Esa no es tu opinión, eso es información repetida que ya está en la pregunta. – hobbs

Cuestiones relacionadas