HTTP/Mensajes/Peticiones/Encabezados de solicitud HTTP (HTTP request headers)

Ya hemos hablado sobre otras peticiones y los métodos HTTP GET y POST pero hay más en un mensaje de solicitud HTTP que solo el método. Un mensaje de HTTP completo consiste de las siguientes partes:

  • [metodo] [URL] [versión]
  • [encabezados]
  • [cuerpo]

El mensaje siempre está en ASCII y la línea de inicio contiene el método, la URL y la versión HTTP (comúnmente 1.1, que ha existido desde 1999). Por último en la sección del cuerpo puede contener información como los datos de inicio de sesión de una cuenta como lo vimos en capítulos anteriores. Al cargar un archivo, la sección del cuerpo puede ser bastante grande.

En la parte central, en la cual vemos el host: google.com contiene uno o mas encabezados HTTP (recordemos que, en HTTP 1.1 el host es un encabezado requerido). En los encabezados podemos encontrar mucha información que nos va ser útil para procesar una petición. Por ejemplo, en el capítulo uno, habíamos hablado sobre representaciones de recursos y cómo el cliente y el servidor pueden negociar de la mejor manera (negociación de contenido). A continuación veremos un ejemplo donde ilustramos cómo quedan los encabezados si el cliente quisiera ver un contenido en francés.

GET: https://www.google.com HTTP/1.1

Host: google.com

Accept-Language: fr-FR

Hay numerosos encabezados definidos en las especificaciones del HTTP. Algunos de estos pueden aparecer tanto en una solicitud como en una respuesta. El mejor ejemplo para representar este caso es el encabezado de la fecha. El cliente o el servidor pueden la fecha en la que se creó el mensaje.

GET: https://www.google.com HTTP/1.1

Host: google.com

Accept-Language: fr-FR

Date: Tue, 15 Nov 1994 08:12:31 GMT

Los encabezados no son obligatorios a excepción del de host que siempre debe aparecer, pero cuando se incluyen encabezados estos deben cumplir con los estándares establecidos, en el caso de la fecha dice que es un HTTP-date que debe estar en formato RFC 822

Acontinuaciòn veremos una tabla con los encabezados más usados

Encabezado Descripciòn Sintaxis Ejemplo
Referer Cuando el usuario hace clic en un enlace, el cliente puede enviar la URL de la página del remitente en esta cabecera. - Referer: <url> Referer: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer
User-Agent Información sobre el usuario (el software) que realiza la solicitud.

Muchas aplicaciones utilizan la información contenida en esta cabecera, cuando está presente, por ejemplo para averiguar qué navegador está realizando la petición (Internet Explorer 6, Internet Explorer, Chrome, Firefox, etc.).

- User-Agent: <producto> / <versión-producto> <comentario>

*comentario puede no tener nada o tener más información de subproductos

User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept Describe los tipos de contenidos que el usuario está dispuesto a aceptar. Esta cabecera es utilizada para la negociación de contenido. - Accept: <MIME_type>/<MIME_subtype>

- Accept: <MIME_type>/*

- Accept: */*

Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8
Acept-

Lenguage

Dice cual es el lenguaje que el usuario prefiere. - Accept-Language: <lenguaje>

- Accept-Language: <lugar>

- Accept-Language: *

Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
Cookie Contiene información de las cookies. (Se verá en el capítulo posterior) contiene información que generalmente ayuda al servidor a rastrear o identificar un usuario. - Cookie: <cookie-list>

- Cookie: name=value

- Cookie: name=value; name2=value2; name3=value3

Cookie: PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1;
if-Modified-

Since

Contendrá la fecha de cuando el usuario realizó la última petición (en la memoria caché) del recurso. El servidor sólo tiene que enviar la parte modificada desde entonces. - If-Modified-Since: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT

Cuando escribes una dirección URL en la barra de direcciones, el navegador envía una petición HTTP y puede verse así:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1

Host: net.tutsplus.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120

Pragma: no-cache

Cache-Control: no-cache

Nótese la aparición de "q" en algunas de las cabeceras. El valor de q es siempre un número de 0 a 1 y representa el valor de la calidad o "grado relativo de preferencia" por un valor particular. El valor por defecto es 1.0, y números más altos indican una mayor preferencia.