La comunicación a través de HTTP se fundamenta en el envío y recepción de mensajes. A estos mensajes los llamamos mensajes HTTP y su estructura interna consta de 4 partes como se muestra en la figura:
Una línea de Inicio
Cabeceras.- Campos relacionados a lo que llamaremos "cabeceras"
Una línea vacía (espacio en blanco)
Cuerpo del mensaje.- Es opcional (se puede o no incluir)
Cada parte puede tener un contenido diferente y esto depende el tipo del mensaje (request o response). Es decir, el contenido de un mensaje de solicitud (HTTP Request) será diferente al contenido de un mensaje de respuesta (HTTP response), sin embargo, los dos tipos de mensajes llevan la misma estructura interna. Te explico estas diferencias con ejemplos.
Solicitud HTTP
La solicitud o petición HTTP (o HTTP Request), es un mensaje HTTP que el Cliente envía al Servidor. Consideremos la estructura general de un mensaje HTTP para estudiar el siguiente ejemplo de solicitud HTTP:
En este ejemplo, el mensaje está formato por dos partes: línea de inicio y cabeceras.
La línea de inicio (línea 1) está conformada por tres partes:
Método: Un comando HTTP expresado como una palabra o verbo que indica la acción que el cliente desea realizar en el servidor. En nuestro ejemplo, la palabra GET es el método/comando de HTTP que significa que el cliente quiere “obtener” un recurso del servidor. Existen varios métodos, ya hablaremos más a fondo de estos métodos en otras secciones.
Path (o ruta): camino o path del recurso (hipertexto) que se desea obtener. En el ejemplo, “/mipagina.html”
Versión del protocolo: especifica la versión del protocolo HTTP utilizado. En el ejemplo: versión 1.1 de HTTP
Si unimos todo, la primera línea se puede traducir en "Oye servidor, necesito obtener la página con el nombre mipagina.html y para esto, quiero que sepas que te hago la solicitud usando el protocolo HTTP en versión 1.1"
Cabecera de Petición.- Las líneas 2 y 3 conforman la zona de las cabeceras (o headers, en inglés), donde cada línea es una cabecera. Una cabecera es información adicional acerca de la conexión que es enviada al servidor. Existe una gran variedad de cabeceras, sin embargo, hablaremos más a fondo sobre las cabeceras en una lección posterior. Por el momento, lo que nos interesa es al menos saber cuáles son las cabeceras de nuestro ejemplo.
La cabecera Host (línea 2) indica el nombre del servidor hacia donde se envía la petición,
La cabecera Accept-Language (línea 3) indica el idioma aceptado por el Cliente, en este caso español.
Nota: Es importante notar que, aunque no se lo puede ver, el mensaje (petición HTTP) termina con un espacio en blanco. En nuestro ejemplo, después de la cabecera Accept-Language existe un espacio en blanco.
No te preocupes por entender el texto de cada cabecera, eso ya lo veremos a fondo en una sección posterior. Como lo habrás notado, este mensaje HTTP no tiene cuerpo (recuerda que el cuerpo es una parte "opcional" dentro de la estructura").
Respuesta HTTP
La respuesta HTTP es un mensaje que el Servidor envía al Cliente. Estudiemos la estructura de este mensaje a través del siguiente ejemplo:
El mensaje está formato por cuatro partes: línea de inicio (línea 1), cabeceras (o headers, en inglés) (líneas 2 a 7) , salto de línea (línea 8) y cuerpo (línea 9 en adelante).
Línea de inicio.- Esta parte (línea 1) está conformada por:
Versión del protocolo HTTP.- Es la versión del protocolo HTTP en la que se envía la respuesta. En el ejemplo se usa la versión 1.1 de HTTP (HTTP/ 1.1).
Código de estado.- Indica si la petición ha sido exitosa, o no, y debido a que. El código de estado viene acompañado de un mensaje de estado, que es una breve descripción del código de estado. En el ejemplo, el código es 200 y el mensaje de estado es ok
De esta manera, si unimos todo, la línea 1 se traduciría en: "Oye cliente, te envío el recurso que me pediste a través del protocolo HTTP en su versión 1.1 y adicionalmente te indico que tuve éxito en encontrar lo que me pediste, es por eso que te envío un OK y su código equivalente: 200".
Cabeceras de Respuesta.- Las lineas 2 a 7 forman el conjunto de "cabeceras". Existe una gran variedad de cabeceras de respuesta y su estudio es un tema de una lección posterior.
Nota: Es importante notar que, aunque no se lo puede ver, existe un espacio entre la cabecera y la sección siguiente (el cuerpo). En nuestro ejemplo esto está marcado con ">>> blanco". Este espacio es propio del estándar HTTP.
Cuerpo.- El cuerpo del mensaje contiene, opcionalmente, el contenido del recurso que se ha solicitado en la petición HTTP. En nuestro caso, este recurso es la página ”mipaginal.html” que está escrita en código HTML y que fue solicitada en la solicitud HTTP (ver la sección anterior).