¿Cómo se ve una solicitud HTTP?

La especificación clave para describir una solicitud HTTP es RFC 7230, “Protocolo de transferencia de hipertexto (HTTP / 1.1): sintaxis y enrutamiento de mensajes”. El formato del mensaje se define en la sección 3 de este documento.

Una solicitud HTTP es un caso de un mensaje HTTP general (la respuesta HTTP es la otra), que consiste en:

  • Una línea de inicio , terminada por un par de avance de línea de retorno de carro (CRLF).
  • Opcionalmente, una o más líneas de encabezado , cada una terminada por un par CRLF.
  • Una línea en blanco (un par CRLF por sí mismo).
  • Opcionalmente, un cuerpo del mensaje .

La línea de inicio de la solicitud HTTP contiene tres elementos, separados por espacios:

  • El método de solicitud , o “verbo” para la solicitud.
  • El objetivo de la solicitud , que indica en qué se debe operar.
  • El nombre y la versión del protocolo, en este caso, “HTTP / 1.1”.

El método de solicitud más común es GET, que recupera el contenido de una página. El siguiente más común es POST, que es utilizado por “formularios” en una página web para enviar datos al servidor. Hay varios menos comunes.

El objetivo de la solicitud suele ser un URI especificado en relación con la “raíz” del sitio, para indicar a qué recurso acceder.

Las líneas de encabezado tienen la forma “palabra clave: valor”. Se utilizan para especificar varios “parámetros” para la solicitud, como qué tipo de contenido le gustaría recuperar al cliente, qué tipo de cuerpo del mensaje (si lo hay) se está enviando, etc.

El cuerpo del mensaje puede ser cualquier dato requerido como parte del mensaje. Su formato y longitud generalmente se especifican por Tipo de contenido : y Longitud de contenido: encabezados. Las solicitudes GET no usan un cuerpo de mensaje, por lo que solo terminan después de la línea en blanco que sigue a los encabezados. Las solicitudes POST generalmente contienen los datos del formulario enviados por el navegador, codificados como “name1 = value1 & name2 = value2 & …”.

Aquí hay un ejemplo de una solicitud HTTP utilizada para recuperar la página de inicio de mi servidor web:

  GET / HTTP / 1.1
 Anfitrión: erbosoft .com
 Conexión: mantener vivo
 Control de caché: max-age = 0
 Aceptar: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, * / *; q = 0.8
 User-Agent: Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 38.0.2125.104 Safari / 537.36
 Aceptar-codificación: gzip, desinflar, sdch
 Idioma de aceptación: en-US, en; q = 0.8
 If-Modified-Since: mar, 07 feb 2012 04:44:06 GMT

( Nota: el espacio adicional entre “erbosoft” y “.com” es necesario para falsificar el analizador de URL de Quora. No estaba presente en la solicitud original. La línea en blanco adicional al final de la solicitud también se omite).

La primera línea le dice al servidor que estamos pidiendo su página “raíz” (eso es lo que significa “/”). La mayoría de los servidores web interpretan la ruta URI como una ruta de directorio relativa a algún “directorio raíz web” y, si la ruta resultante identifica un directorio, busque un archivo en ese directorio llamado “index.html” y envíelo. El host: el encabezado le dice que estamos pidiendo un nombre de host en particular; Los servidores web pueden servir páginas para múltiples hosts, así es como el servidor lo distingue.

La conexión: el encabezado keep-alive le dice al servidor: “No cierre la conexión después de enviarnos este archivo, probablemente tengamos más cosas que pedirle”. El encabezado Cache-Control: max-age = 0 dice que no queremos una copia en caché; Queremos uno nuevo.

Los diversos encabezados de “aceptación” le dicen al servidor exactamente qué tipo y formato de contenido queremos buscar. Sin entrar en demasiados detalles, el navegador dice que preferiría recibir texto HTML o XHTML (el Aceptar: encabezado), puede usar ciertos métodos de codificación para reducir el tamaño del contenido para la transmisión (el Aceptar-Codificar: encabezado), y preferiría recibir texto en inglés de EE. UU., aunque el inglés normal estaría bien (el idioma de aceptación: encabezado).

La complicada cadena de texto enviada en el User-Agent: encabezado identifica el navegador exactamente, con todo tipo de texto de “compatibilidad” incluido, por lo que si el servidor cuenta con ver otro tipo de navegador, no se asustará. El navegador, en este caso, es Chrome, aunque también se identifica con cadenas para Mozilla, Apple WebKit, KHTML, Gecko y Safari. También le dice al servidor que el navegador se ejecuta bajo el sistema de ventanas X11 en una máquina Linux de 64 bits.

El encabezado If-Modified-Since: le dice al servidor: “Ya recuperé una copia de esta página web en este momento. Si no ha cambiado desde entonces, solo dígame eso en lugar de enviarlo todo otra vez.”

El servidor tomará todo esto y enviará una respuesta apropiada.

Punta de sombrero: Daniel catalán para la A2A.

Formato de una solicitud HTTP

Tiene tres componentes principales, que son: –

  • Método de solicitud HTTP, URI y versión de protocolo : esta siempre debe ser la primera línea de una solicitud HTTP. Como es bastante evidente por el nombre en sí, contiene el método de solicitud HTTP que se utiliza para esa solicitud en particular, el URI y el nombre del protocolo HTTP con la versión que se está utilizando. Puede parecer ‘GET /servlet/jspName.jsp HTTP / 1.1’ donde el método de solicitud que se utiliza es ‘GET’, el URI es ‘/servlet/jspName.jsp’ y el protocolo (con la versión) es ‘HTTP / 1.1 ‘.
  • Encabezados de solicitud HTTP : esta sección de una solicitud HTTP contiene los encabezados de solicitud, que se utilizan para comunicar información sobre el entorno del cliente. Algunos de estos encabezados son: Tipo de contenido, Agente de usuario, Codificación de aceptación, Longitud de contenido, Idioma de aceptación, Host, etc. Es muy obvio entender qué información llevan estos encabezados, ¿no es así? Los nombres se explican por sí mismos.
  • Cuerpo de solicitud HTTP : esta parte contiene la solicitud real que se envía al servidor HTTP. El encabezado y el cuerpo de la solicitud HTTP están separados por una línea en blanco (secuencia CRLF, donde CR significa retorno de carro y LF significa avance de línea). Esta línea en blanco es una parte obligatoria de una solicitud HTTP válida. 🙂

Consulte Programación de cliente web con Perl, capítulo 3:
http://oreilly.com/openbook/webc

La Figura 3-2 es lo que está buscando:

También hay:

HTTP hecho realmente fácil:
http://www.jmarshall.com/easy/http/

More Interesting

¿Cómo se comparan los mainframes con los servidores disponibles en la actualidad? ¿Cual es mejor?

¿Cuál es la mejor solución de respaldo (asequible) de computadora a computadora y en la nube con versiones? Se necesita hacer una copia de seguridad de dos servidores a través de Internet y de la red (ampliado con VDSL).

¿Cuál es la mejor manera de configurar la rotación de registros en un servidor Ubuntu?

¿Por qué la mayoría de los programadores no pueden alojar / publicar sus aplicaciones? ¿Carecen de conocimiento de servidores y redes?

¿Qué es un servidor de red?

¿Por qué se necesita un personal dedicado para administrar un servidor?

Cómo agregar un compilador en línea a mi sitio como los que tienen las escuelas Codecademy y W3

¿Qué es un servidor? ¿Por qué los sitios web de alto tráfico necesitan más de 1 servidor?

¿Cuál es el mejor cliente FTP para Windows y Mac OS?

¿Qué es una buena compañía que proporciona servicios de centro de datos: manos remotas, servidores de instalación y rack, instalación de servidores de parches, etc.

¿Qué debo hacer para que una sala de servidores sea compatible con PCI-DSS?

¿Cuál sería la mejor manera de aprender Linux mientras configura un servidor doméstico?

¿Qué tan grande es Evernote en términos de espacio de almacenamiento total?

¿Cómo puede un principiante configurar un servidor?

Servidores: Si tuviera que comenzar a construir un sitio web de php hoy (verano de 2012) que espera que gane una comunidad grande y activa, ¿hay alguna razón por la que usaría Apache en lugar de Nginx?