HTTP: mensajes

HTTP se basa en el modelo de arquitectura cliente-servidor y en un protocolo de solicitud / respuesta sin estado que opera mediante el intercambio de mensajes a través de una conexión TCP / IP confiable.

Un "cliente" HTTP es un programa (navegador web o cualquier otro cliente) que establece una conexión a un servidor con el propósito de enviar uno o más mensajes de solicitud HTTP. Un "servidor" HTTP es un programa (generalmente un servidor web como Apache Web Server o Internet Information Services IIS, etc.) que acepta conexiones para atender solicitudes HTTP mediante el envío de mensajes de respuesta HTTP.

HTTP utiliza el identificador uniforme de recursos (URI) para identificar un recurso determinado y establecer una conexión. Una vez establecida la conexión,HTTP messagesse pasan en un formato similar al utilizado por el correo de Internet [RFC5322] y las Extensiones de correo de Internet multipropósito (MIME) [RFC2045]. Estos mensajes incluyenrequests de cliente a servidor y responses de servidor a cliente que tendrá el siguiente formato:

HTTP-message   = <Request> | <Response> ; HTTP/1.1 messages

Las solicitudes HTTP y las respuestas HTTP utilizan un formato de mensaje genérico de RFC 822 para transferir los datos requeridos. Este formato de mensaje genérico consta de los siguientes cuatro elementos.

  • A Start-line
  • Zero or more header fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

En las siguientes secciones, explicaremos cada una de las entidades utilizadas en un mensaje HTTP.

Línea de inicio de mensaje

Una línea de salida tendrá la siguiente sintaxis genérica:

start-line = Request-Line | Status-Line

Analizaremos Request-Line y Status-Line mientras hablamos de los mensajes HTTP Request y HTTP Response respectivamente. Por ahora, veamos los ejemplos de la línea de inicio en caso de solicitud y respuesta:

GET /hello.htm HTTP/1.1     (This is Request-Line sent by the client)

HTTP/1.1 200 OK             (This is Status-Line sent by the server)

Campos de encabezado

Los campos de encabezado HTTP proporcionan la información necesaria sobre la solicitud o respuesta, o sobre el objeto enviado en el cuerpo del mensaje. Hay cuatro tipos de encabezados de mensajes HTTP:

  • General-header: Estos campos de encabezado tienen aplicabilidad general tanto para mensajes de solicitud como de respuesta.

  • Request-header: Estos campos de encabezado solo se aplican a los mensajes de solicitud.

  • Response-header: Estos campos de encabezado solo se aplican a los mensajes de respuesta.

  • Entity-header: Estos campos de encabezado definen la metainformación sobre el cuerpo de la entidad o, si no hay ningún cuerpo presente, sobre el recurso identificado por la solicitud.

Todos los encabezados mencionados anteriormente siguen el mismo formato genérico y cada uno de los campos de encabezado consta de un nombre seguido de dos puntos (:) y el valor del campo de la siguiente manera:

message-header = field-name ":" [ field-value ]

A continuación se muestran ejemplos de varios campos de encabezado:

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

Cuerpo del mensaje

La parte del cuerpo del mensaje es opcional para un mensaje HTTP, pero si está disponible, se utiliza para llevar el cuerpo de entidad asociado con la solicitud o respuesta. Si el cuerpo de la entidad está asociado, normalmenteContent-Type y Content-Length Las líneas de encabezado especifican la naturaleza del cuerpo asociado.

El cuerpo de un mensaje es el que contiene los datos de la solicitud HTTP real (incluidos los datos del formulario y los cargados, etc.) y los datos de respuesta HTTP del servidor (incluidos archivos, imágenes, etc.). A continuación se muestra el contenido simple del cuerpo de un mensaje:

<html>
   <body>
   
      <h1>Hello, World!</h1>
   
   </body>
</html>

Los siguientes dos capítulos harán uso de los conceptos explicados anteriormente para preparar solicitudes HTTP y respuestas HTTP.