protocolo lineas headers definicion cabeceras cabecera http http-headers string

lineas - http headers post



¿Cómo interpretar el encabezado HTTP Aceptar vacío? (2)

De RFC2616 Sec4.2 :

Cada campo de encabezado consta de un nombre seguido de dos puntos (":") y el valor del campo.

A primera vista, esto parecería poner mensajes que especifiquen valores de encabezado vacíos en la categoría malformada y no conforme. Sin embargo, el formulario BNF aumentado resumido en RFC2616 Sec2.1 indica que

"#element" permite cualquier número, incluido cero

Como esta es la declaración utilizada para especificar valores de encabezado de aceptación, parece que los valores vacíos son válidos.

Analizar encabezados y encabezados vacíos con nada más que espacio en blanco puede ser problemático debido a la siguiente dirección de la especificación:

El contenido de campo no incluye ningún LWS inicial o final: espacio en blanco lineal que se produce antes del primer carácter que no es de espacio en blanco del valor de campo o después del último carácter no de espacio en blanco del valor de campo. Tal LWS principal o posterior PUEDE eliminarse sin cambiar la semántica del valor del campo. Cualquier LWS que ocurra entre el contenido del campo PUEDE ser reemplazado por un único SP antes de interpretar el valor del campo o reenviar el mensaje en sentido descendente.

En mi humilde opinión, enviar un encabezado vacío es completamente inútil. No se debe hacer, y los analizadores pueden no analizar correctamente estos encabezados. Tradicionalmente, las personas que desean eludir dichas limitaciones cuando se trata de componentes no conformes han especificado valores "pseudovacíos" como este:

X-MyCustomHeader: ""

Si simplemente desea validar que un campo de encabezado se envió como alguna forma de cambio booleano, considere enviar un valor de marcador de posición como el anterior en lugar de un valor vacío.

Actualizar

Supongo que no estaba muy claro al responder directamente la pregunta: en el caso de un encabezado Aceptar vacío, realmente tienes dos opciones:

  • Envíe una respuesta 406 Not Acceptable para informar al cliente que no ofrece ningún tipo de contenido para un valor de Aceptar vacío (duh).

Esto está justificado, pero no es requerido por RFC2616 Sec14.1 :

Si está presente un campo de encabezado Aceptar, y si el servidor no puede enviar una respuesta que sea aceptable de acuerdo con el valor combinado del campo Aceptar, el servidor DEBERÍA enviar una respuesta 406 (no aceptable).

  • O bien, como esto no es necesario y es muy poco probable que el usuario no acepte ningún tipo de contenido (de lo contrario, ¿por qué se molestarían en enviar la solicitud?) ... Sugeriría tratar un valor Accept: (si el rechazo del mensaje) no es una opción) lo mismo que Accept: */* .

El encabezado de la solicitud HTTP / 1.1 Accept se especifica en RFC 2616, sección 14.1 .

Su sintaxis se da así:

Accept = "Accept" ":" #( media-range [ accept-params ] )

# sin ningún número establece cero o más de acuerdo con la sección 2.1 . Sin embargo, la sección 14.1 no hace ninguna declaración sobre cómo interpretar un encabezado Accept aceptado. Esto está en contraste con la sección 14.2 , que habla de Accept-Encoding , donde no solo se usa 1# ( uno o más ), sino que también se especifica el caso de un encabezado Accept-Encoding vacío, lo cual es un tanto extraño. Algunas otras secciones que tratan con encabezados de solicitud también son específicas en el caso especial de un valor vacío.

¿Debería tratarse un encabezado Accept vacío de manera equivalente a un encabezado Accept inexistente ? ¿Hay algún recurso oficial sobre esto que me perdí?


De acuerdo con http://tools.ietf.org/html/rfc7231#section-5.3.2 :

Una solicitud sin ningún campo de encabezado Aceptar implica que el agente de usuario aceptará cualquier tipo de medio en respuesta.

Debería tratar un encabezado de Accept inexistente como */* .