# 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.
* Formularios y Peticiones GET
* Sobre los métodos y los recursos
* Encabezados de Petición