Encabezados HTTP

Este artículo proporciona una descripción general de los encabezados HTTP .
Para obtener una descripción de encabezados específicos, consulte Lista de encabezados HTTP .

Los encabezados HTTP son cadenas en un mensaje HTTP que contienen un par nombre-valor separados por dos puntos .  El formato de los encabezados sigue el formato general de los encabezados de mensajes de red de texto ARPA (ver RFC 822 ). Los encabezados deben estar separados del cuerpo del mensaje por al menos una línea en blanco.

Todos los títulos se dividen en cuatro grupos principales:

  1. Encabezados generales ( rus. Encabezados principales ): deben incluirse en cualquier mensaje del cliente y el servidor.
  2. Encabezados de solicitud ( rus. Encabezados de solicitud ): se utilizan solo en solicitudes de clientes.
  3. Encabezados de respuesta ( rus. Encabezados de respuesta ): solo para respuestas del servidor.
  4. Encabezados de entidad ( en ruso. Encabezados de entidad ): acompañan a cada entidad del mensaje.

Este es el orden en el que se recomienda enviar los encabezados al destinatario.

Formato general

Está previsto colocar el valor en varias líneas (salto de línea). Para indicar una ruptura, al menos un carácter de espacio en blanco debe estar presente al comienzo de la siguiente línea.

Los encabezados con los mismos nombres de parámetros pero diferentes valores se pueden combinar en uno solo si el valor del campo es una lista separada por comas. En todos los demás casos, los valores de las partidas más distantes deben superponerse a los anteriores. Por lo tanto, los proxies no deben cambiar el orden de los encabezados de un mensaje. En este caso, el orden de los elementos de la lista no suele importar.

Un ejemplo con valores de varias líneas y nombres de encabezado idénticos (nota mayúsculas y minúsculas y espacios):

tipo de contenido: texto/html; conjunto de caracteres = windows-1251 Permitir: OBTENER, CABEZA Longitud del contenido: 356 PERMITIR: OBTENER, OPCIONES Duración del contenido: 1984

La versión compacta correcta de la transformación e interpretación es:

Tipo de contenido: text/html;charset=windows-1251 Permitir: OBTENER, CABEZA, OPCIONES Duración del contenido: 1984

En este caso, es ilegal aceptar un valor de Content-Length de 356. Al combinar los valores de Permitir, para no perder el significado semántico, se agregó una coma al final del primer campo y el elemento "GET" duplicado sin sentido. fue removido.

Estructuras utilizadas en los encabezados

Fecha y hora

Sólo la fecha se indica en los encabezados Date, Expires, Last-Modified, If-Modified-Since, If-Unmodified-Since. La fecha puede aparecer en encabezados If-Rangey archivos Warning.

HTTP utiliza tres formatos:

RFC 7231 indica a los destinatarios de los datos que estén preparados para procesar sellos de fecha y hora en los tres formatos, y que generen sellos de fecha y hora solo en su formato preferido.

La hora siempre se especifica para la zona horaria GMT ( UTC+0 ). El año se escribe con cuatro dígitos. El día, la hora, el minuto y el segundo se rellenan con ceros hasta dos caracteres. Se utilizan abreviaturas estándar de tres letras en inglés para los nombres del mes y el día de la semana.

Días de la semana a partir del lunes: Mon, Tue, Wed, Thu, Fri, Sat, Sun.

Meses de enero a diciembre: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec.

PHP usa la función gmdate() para convertir la hora local a GMT. Ejemplos de generación de fechas para encabezados HTTP:

// Fecha de generación del documento actual: header ( "Date: " . gmdate ( DateTime :: RFC850 )); // Fecha de modificación del archivo especificado: $fp = 'data/my-foo.txt' ; // ruta al archivo de encabezado ( "Última modificación: " . gmdate ( "D, d MYH:i:s" , filemtime ( $fp )) . "GMT" ); // Se supone que el documento cambiará en una hora: header ( "Expira: " . gmdate ( "D, d MYH:i:s" , time () + 3600 ) . "GMT" ); // 3600 - el número de segundos relativos al momento actual.

Rangos de bytes

Cuando se trabaja con fragmentos de contenido , los rangos de bytes se utilizan en encabezados especiales .  Puede especificar un fragmento o varios fragmentos en ellos, separándolos con comas " ". Los rangos se aplican en encabezados y . El encabezado enumera solo las unidades de medida. ,RangeContent-RangeAccept-Ranges

En rangos de bytes, se debe indicar al principio el nombre de las unidades de medida , seguido del símbolo " =". De momento, aparte de las unidades, bytesno se utilizan otras. Detrás del símbolo “ ” =están los rangos mismos. Cada uno de ellos es un -par de números naturales separados por guiones, o cero y un número natural. El primer elemento especifica el byte de inicio y el segundo especifica el byte de finalización. La numeración en rangos comienza desde cero.

Es posible que no se especifique el byte de inicio o final. En ausencia del último byte, se considera que estamos hablando de un fragmento desde el byte de inicio hasta el final del contenido. Si no hay inicio, el número de byte final se toma como el número de bytes solicitados desde el final del contenido.

Si el primer byte es mayor que el último, el rango se considera sintácticamente inválido .  Los campos de encabezado que contienen rangos con valores sintácticamente no válidos se ignoran. Si el primer byte está fuera del alcance del recurso, se ignora el rango. Si el último byte está fuera de los límites, el rango se trunca hasta el final.

Un bloque de rangos de bytes se considera ejecutable si contiene al menos un rango disponible. Si todos los rangos son incorrectos o están fuera del alcance del recurso, entonces el servidor debe devolver un mensaje con el estado 416(Rango solicitado no satisfactorio).

Ejemplos (todo el recurso es de 5000 bytes):

  • bytes=0-255 — fragmento de 0 a 255 bytes inclusive.
  • bytes=42-42 - una solicitud de un byte 42.
  • bytes=4000-7499,1000-2999 - dos fragmentos. Dado que el primero está fuera de los límites, se interpreta como " 4000-4999".
  • bytes=3000-,6000-8055 - el primero se interpreta como " 3000-4999", y el segundo se ignora.
  • bytes=-400,-9000 - los últimos 400 bytes (de 4600 a 4999), y el segundo se ajusta al marco de contenido (de 0 a 4999) denotando todo el volumen como un fragmento.
  • bytes=500-799,600-1023,800-849 - en las intersecciones, los rangos se pueden combinar en uno (de 500 a 1023).

Encabezados

Encabezados en HTML

El lenguaje de marcado HTML le permite establecer los valores de encabezado HTTP necesarios internamente <HEAD>usando la etiqueta <META>. En este caso, el nombre del encabezado se especifica en el atributo http-equivy el valor en content. El valor del encabezado casi siempre se establece Content-Typecon la codificación especificada para evitar problemas con la visualización del texto por parte del navegador. Tampoco está de más indicar el valor del encabezado Content-Language:

< html > < encabezado > < meta http-equiv = "Content-Type" content = "text/html;charset=windows-1251" > < meta http-equiv = "Content-Language" content = "en" > ...

Véase también