Estructura de mensajes del protocolo HTTP

Estructura del mensaje del protocolo HTTP <2>

Estructura del mensaje HTTP

mensaje de solicitud

La estructura del mensaje de solicitud HTTP consta de las siguientes partes:

Línea de solicitud:
  • La línea de solicitud 请求方法contiene 目标 URLy 协议版本.
  • Están separados por espacios y terminan con un avance de línea de retorno de carro (CRLF).

Formato: Método SP Solicitud-URI SP HTTP-Versión CRLF

Ejemplo: OBTENER /index.html HTTP/1.1

Método de solicitud
  • GET: Se utiliza para obtener (o recuperar) recursos del servidor.
  1. POST: se utiliza para enviar (o enviar) datos al servidor, generalmente se usa para crear nuevos recursos.
  2. PUT: se utiliza para reemplazar recursos en la ruta URL especificada y se puede utilizar para crear o actualizar recursos.
  3. OPCIONES: se utiliza para obtener los métodos de solicitud admitidos por el recurso de destino, los encabezados de solicitud permitidos y otra información.
  4. HEAD: Similar a una solicitud GET, pero solo devuelve la misma información del encabezado de respuesta que una solicitud GET, sin cuerpo de respuesta, se utiliza para obtener metadatos de recursos.
  5. ELIMINAR: se utiliza para eliminar el recurso especificado.
  6. TRACE: se utiliza para rastrear los cambios en los mensajes realizados por el servidor de retransmisión durante el proceso de solicitud, a menudo se usa para depurar y solucionar problemas.
  7. PATCH: Se utiliza para realizar modificaciones parciales a los recursos existentes y actualizar solo una parte de los recursos.

Más adelante se publicará un artículo aparte para presentar en detalle estos 8 métodos de solicitud.

URL

URL es la abreviatura de Localizador uniforme de recursos y se utiliza para identificar y localizar recursos en Internet. Una URL consta de varias partes, incluido el protocolo, el nombre de host, el número de puerto, la ruta, los parámetros de consulta y los fragmentos, etc.

La siguiente es la estructura general de una URL:

[协议]://[主机名或IP地址]:[端口号]/[路径]?[查询参数]#[片段]

La explicación específica es la siguiente:

  • Protocolo: Indica el protocolo de comunicación utilizado en la red, como HTTP, HTTPS, FTP, etc.
  • Nombre de host o dirección IP: especifica la dirección del servidor, que puede ser un nombre de dominio o una dirección IP.
  • Número de puerto: opcional, especifica el número de puerto que escucha el servicio en el servidor. Si no se especifica, el número de puerto predeterminado del protocolo se utiliza de forma predeterminada (por ejemplo, HTTP tiene como valor predeterminado 80).
  • Ruta: especifica la ruta o estructura de carpetas del recurso en el servidor.
  • Parámetros de consulta: opcional, se utiliza para pasar parámetros adicionales al servidor, expresados ​​​​en forma de pares clave-valor, y varios parámetros están separados por "&".
  • Fragmento: opcional, representa una parte específica de un recurso, generalmente se usa dentro de una página web para navegar a una ubicación de anclaje específica.

Aquí hay algunos ejemplos de URL:

  • https://www.ejemplo.com/index.html
  • http://192.168.0.1:8080/api/users?sort=asc&page=1
  • ftp://ftp.example.com/files/document.pdf#page=10

Las URL se pueden utilizar para acceder a páginas web en un navegador, obtener datos de un servidor, crear solicitudes de API, etc. Al analizar las distintas partes de la URL, el cliente puede localizar y solicitar con precisión el recurso requerido.

La codificación RUL también se explicará por separado en un artículo separado más adelante.

Versión del protocolo

Esto es fácil de entender: es el número de versión correspondiente a HTTP.

Encabezados de solicitud:
  • El encabezado de la solicitud contiene información de solicitud adicional en forma de pares clave-valor, una línea por campo, terminada por un retorno de carro y un avance de línea (CRLF).

Formato: Nombre del encabezado: Valor del encabezado CRLF

Ejemplo:

Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html

Los encabezados de solicitud son información adicional enviada al servidor en una solicitud HTTP para describir los atributos, expectativas, autenticación, etc. de la solicitud. Los encabezados de solicitud se expresan en formato nombre-valor y se encuentran en la parte del encabezado de la solicitud HTTP.

A continuación se muestran algunos encabezados de solicitud comunes:

  1. Agente de usuario:
    • Identifica el agente de usuario que inició la solicitud (es decir, navegador, programa cliente, etc.), que utiliza el servidor para identificar diferentes agentes de usuario.
  2. Aceptar:
    • Especifique el tipo de contenido de respuesta que el cliente puede recibir, generalmente especificando el tipo MIME (como texto/html, aplicación/json, etc.).
  3. Tipo de contenido:
    • Especifica el tipo de medio del contenido del cuerpo de la solicitud, que se utiliza para indicarle al servidor cómo analizar los datos del cuerpo de la solicitud.
  4. Autorización:
    • Información de credencial utilizada para la autenticación, como nombre de usuario y contraseña en autenticación básica.
  5. Galleta:
    • Una cookie HTTP enviada por el servidor al cliente antes de ser enviada en la solicitud para rastrear el estado de la sesión del usuario.
  6. Referirse:
    • Indica la URL de origen de la solicitud, es decir, la URL de la página anterior. Se utiliza comúnmente para evitar la falsificación de solicitudes entre sitios (CSRF).
  7. Largancia de contenido:
    • Especifica la longitud del cuerpo de la solicitud (en bytes), que se utiliza para informar al servidor del tamaño del cuerpo de la solicitud.
  8. Control de caché:
    • Se utiliza para controlar el comportamiento del almacenamiento en caché, como indicar si la respuesta se puede almacenar en caché, el período de validez de la caché, etc.
  9. Anfitrión:
    • Especifique el nombre de host y el número de puerto del servidor de destino, que utiliza el servidor para encontrar el sitio web correspondiente y procesar la solicitud.

Los anteriores son solo algunos encabezados de solicitud comunes. De hecho, hay más encabezados de solicitud que se pueden usar para pasar información diferente e implementar funciones específicas.

Línea vacía:
  • Se utiliza una línea en blanco para separar los encabezados y el cuerpo de la solicitud. Consiste en un carácter de retorno de carro y avance de línea (CRLF), que indica el final del encabezado de la solicitud.
Cuerpo de la solicitud:
  • El cuerpo de la solicitud es opcional y se utiliza para enviar datos adicionales al servidor en determinadas situaciones.

  • El cuerpo de la solicitud es una parte opcional incluida en la solicitud HTTP para enviar datos o información al servidor. El cuerpo de la solicitud se suele utilizar para métodos de solicitud como POST y PUT.

El cuerpo de la solicitud puede contener varios tipos de datos, como datos de formulario, datos JSON, datos XML, archivos, etc. El formato y la codificación de los datos generalmente se especifican en el campo Tipo de contenido en el encabezado de la solicitud.

A continuación se muestran algunos ejemplos de órganos de solicitud comunes:

  1. Datos del formulario:
name=John+Doe&[email protected]

name=John+Doe&[email protected]es un ejemplo de datos de formulario. Esta es una forma común de codificar datos en pares clave-valor, que a menudo se usa en envíos de formularios o parámetros de consulta de URL.

En este ejemplo, hay dos pares clave-valor:

  • name=John+DoeIndica que la clave es namey el valor es John+Doe, donde +está la codificación de espacios de la URL.
  • [email protected]Indica que la clave es emaily el valor es [email protected].

Este formato de datos de formulario se usa comúnmente a través de solicitudes HTTP POST o se agrega a las URL como cadenas de consulta. En una aplicación práctica, estos datos se pueden enviar al servidor como parte del cuerpo de la solicitud.

  1. Datos JSON:
{
    
    
  "name": "John Doe",
  "email": "[email protected]"
}

En el ejemplo del cuerpo de la solicitud, { "name": "John Doe", "email": "[email protected]" }se encuentran los datos JSON de un ejemplo. JSON (Notación de objetos JavaScript) es un formato de intercambio de datos común que se utiliza para representar datos estructurados.

En el ejemplo, todos los datos son un objeto JSON, {}rodeado por llaves. Este objeto contiene dos propiedades, a saber "name"y "email".

"name": "John Doe"Representa un par clave-valor de atributo, el nombre del atributo es "name"y el valor es "John Doe", lo que indica que el nombre es "John Doe".

"email": "[email protected]"También representa un par clave-valor de atributo. El nombre del atributo es "email"y el valor es "[email protected]", lo que indica que el correo electrónico es "[email protected]".

JSON es un formato de datos universal que se utiliza en muchos escenarios, como la transmisión de datos de API web, archivos de configuración, almacenamiento de datos no estructurados, etc. Cuando se trabaja con datos JSON, normalmente se utiliza un analizador o biblioteca correspondiente para leer, generar y analizar JSON.

  1. Datos XML:
<person>
  <name>John Doe</name>
  <email>[email protected]</email>
</person>

<person>Es un elemento raíz de datos XML que contiene campos o atributos relacionados.

<name>John Doe</name>Representa un <name>elemento que contiene un campo de nombre con el valor "John Doe".

<email>[email protected]</email>Representa un <email>elemento que contiene un campo de correo electrónico con el valor "[email protected]".

XML es la abreviatura de eXtensible Markup Language, que se utiliza para representar datos estructurados. En el cuerpo de la solicitud o el cuerpo de la respuesta, puede utilizar el formato XML para transmitir y almacenar datos.

XML utiliza etiquetas para describir la estructura y las relaciones jerárquicas de los datos. <person>, <name>pertenecen <email>a diferentes etiquetas y se utilizan para definir diferentes partes de los datos.

Por ejemplo, puede <person>pensar en el elemento completo como un objeto de información de una persona, que contiene un campo de nombre y un campo de correo electrónico. Se pueden agregar más campos y datos al cuerpo XML según las necesidades reales.

XML es un formato de representación de datos universal que se utiliza en muchos escenarios, como intercambio de datos, archivos de configuración, servicios web, etc. Cuando se trabaja con datos XML, generalmente se utiliza un analizador o biblioteca correspondiente para leer y analizar el XML.

  1. Subir archivo:
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="file"; filename="example.jpg"
Content-Type: image/jpeg

<binary data>

En el ejemplo del cuerpo de la solicitud, ------WebKitFormBoundaryABC123es un delimitador de datos de formulario que se utiliza para identificar las posiciones inicial y final de diferentes datos de campo.

Content-Disposition: form-data; name="file"; filename="example.jpg"Son metadatos utilizados para describir datos de campo, donde:

  • form-dataIndica que este es un campo de datos de formulario.
  • name="file"Indica que el nombre del campo es "archivo".
  • filename="example.jpg"Representa el nombre del archivo original del archivo contenido en el campo "ejemplo.jpg".

Content-Type: image/jpegEl tipo de archivo contenido en el campo especificado es image/jpeg, es decir, el tipo de archivo de imagen JPEG.

<binary data>Indica que en el cuerpo de la solicitud real, aquí se deben incluir datos binarios, es decir, el contenido real del archivo, generalmente en escenarios de carga de archivos.

Para cargar el archivo, debe <binary data>reemplazarlo con el contenido binario del archivo. Normalmente, estos datos binarios existen en bytes y el contenido del archivo se puede leer como binario mediante una operación de lectura de archivo y colocarse en la parte correspondiente del cuerpo de la solicitud.

Tenga en cuenta que el contenido y el formato del cuerpo de la solicitud dependen del escenario y los requisitos específicos de la aplicación. Al enviar una solicitud, puede configurar el cuerpo de la solicitud de acuerdo con sus necesidades y especificar claramente el campo Tipo de contenido en el encabezado de la solicitud para que el servidor pueda analizar y procesar correctamente el cuerpo de la solicitud.

Después de recibir la solicitud, el servidor analizará el cuerpo de la solicitud y realizará el procesamiento correspondiente de acuerdo con la lógica de la aplicación.

mensaje de respuesta

状态码El mensaje de respuesta HTTP son datos que contienen respuesta , 响应头suma y 响应体otra información devuelta por el servidor al cliente después de que el cliente envía una solicitud . La siguiente es la estructura general de un mensaje de respuesta HTTP:

Línea de estado:

La línea de estado contiene 协议版本mensajes 响应状态码y 响应状态. Por ejemplo:

HTTP/1.1 200 OK
Versión del protocolo

Al igual que la versión del protocolo en el mensaje de solicitud, ambos indican la versión utilizando el protocolo http.

Código de estado de respuesta

El código de estado de respuesta es un valor en la respuesta HTTP que representa el resultado del procesamiento de la solicitud y se utiliza para indicar el éxito, el fracaso u otras circunstancias especiales de la solicitud. Cada código de estado de respuesta tiene un significado y una semántica específicos.

El protocolo HTTP define un conjunto de códigos de estado de respuesta estándar. Los siguientes son algunos códigos de estado de respuesta comunes y sus significados:

  • 1xx: información
información describir
100 Continuar El servidor recibe solo una parte de la solicitud, pero una vez que el servidor no rechaza la solicitud, el cliente debe continuar enviando el resto de la solicitud.
101 protocolos de conmutación Protocolo de conversión del servidor: el servidor cumplirá con la solicitud del cliente y la convertirá a otro protocolo.
  • 2xx: éxito
información describir
200 bien Solicitud exitosa (seguida de los documentos de respuesta a las solicitudes GET y POST).
201 creado Se crea la solicitud y se crea el nuevo recurso.
202 Aceptado Se aceptó la solicitud de procesamiento, pero el procesamiento no se completó.
203 Información no autorizada El documento se ha devuelto normalmente, pero algunos encabezados de respuesta pueden ser incorrectos porque se utilizó una copia del documento.
204 Sin contenido No hay documentos nuevos. El navegador debería seguir mostrando el documento original. Este código de estado es útil si el usuario actualiza la página periódicamente y el servlet puede determinar que el documento del usuario está lo suficientemente actualizado.
205 Restablecer contenido No hay documentos nuevos. Pero el navegador debería restablecer lo que muestra. Se utiliza para obligar al navegador a borrar el contenido de entrada del formulario.
206 Contenido parcial El cliente envía una solicitud GET con un encabezado Range y el servidor la completa.
  • 3xx: redirigir
información describir
300 opciones múltiples Múltiples opciones. Lista enlazada. Los usuarios pueden seleccionar un enlace para llegar a su destino. Se permiten un máximo de cinco direcciones.
301 Movido Permanentemente La página solicitada se ha movido a la nueva URL.
302 encontrado La página solicitada se ha movido temporalmente a la nueva URL.
303 Ver Otros La página solicitada se puede encontrar en otra URL.
304 No modificado El documento no fue modificado como se esperaba. El cliente tiene un documento almacenado en búfer y realiza una solicitud condicional (generalmente proporcionando un encabezado If-Modified-Since para indicar que el cliente solo quiere documentos que sean más recientes que la fecha especificada). El servidor le dice al cliente que el documento original almacenado en el búfer puede seguir utilizándose.
305 Usar proxy Los documentos solicitados por el cliente deben recuperarse a través del servidor proxy especificado en el encabezado Ubicación.
306 sin usar Este código se utilizó en una versión anterior. Ya no se utiliza, pero el código aún se conserva.
307 Redirección Temporal La página solicitada se ha movido temporalmente a una nueva URL.
  • 4xx: error del cliente
información describir
400 Petición Incorrecta El servidor no entendió la solicitud.
401 No autorizado La página solicitada requiere un nombre de usuario y contraseña.
401.1 Error de inicio de sesion.
401.2 La configuración del servidor provoca un error de inicio de sesión.
401.3 No se obtiene la autorización debido a restricciones de recursos de ACL.
401.4 Error en la autorización del filtro.
401.5 Error en la autorización de la aplicación ISAPI/CGI.
401.7 El acceso es denegado por la política de autorización de URL en el servidor web. Este código de error es específico de IIS 6.0.
402 Pago requerido Este código aún no está disponible.
403 Prohibido Está prohibido el acceso a la página solicitada.
403.1 El acceso a la ejecución está prohibido.
403.2 El acceso de lectura está prohibido.
403.3 El acceso de escritura está prohibido.
403.4 Se requiere SSL.
403.5 Se requiere SSL 128.
403.6 Dirección IP rechazada.
403.7 Requiere certificado de cliente.
403.8 Acceso al sitio denegado.
403.9 Demasiados usuarios.
403.10 Configuración no válida.
403.11 Cambio de contraseña.
403.12 Se deniega el acceso a la tabla de mapeo.
403.13 El certificado de cliente fue revocado.
403.14 Denegar listado de directorio.
403.15 Se excedió el permiso de acceso del cliente.
403.16 El certificado del cliente no es de confianza o no es válido.
403.17 El certificado de cliente ha caducado o aún no es válido.
403.18 La URL solicitada no se puede ejecutar en el grupo de aplicaciones actual. Este código de error es específico de IIS 6.0.
403.19 No se puede realizar CGI para clientes en este grupo de aplicaciones. Este código de error es específico de IIS 6.0.
403.20 Error al iniciar sesión con el pasaporte. Este código de error es específico de IIS 6.0.
404 Not Found 服务器无法找到被请求的页面。
404.0 (无)–没有找到文件或目录。
404.1 无法在所请求的端口上访问Web站点。
404.2 Web服务扩展锁定策略阻止本请求。
404.3 MIME映射策略阻止本请求。
405 Method Not Allowed 请求中指定的方法不被允许。
406 Not Acceptable 服务器生成的响应无法被客户端所接受。
407 Proxy Authentication Required 用户必须首先使用代理服务器进行验证,这样请求才会被处理。
408 Request Timeout 请求超出了服务器的等待时间。
409 Conflict 由于冲突,请求无法被完成。
410 Gone 被请求的页面不可用。
411 Length Required "Content-Length"未被定义。如果无此内容,服务器不会接受请求。
412 Precondition Failed 请求中的前提条件被服务器评估为失败。
413 Request Entity Too Large 由于所请求的实体的太大,服务器不会接受请求。
414 Request-url Too Long 由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。
415 Unsupported Media Type 由于媒介类型不被支持,服务器不会接受请求。
416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。
417 Expectation Failed 执行失败。
423 锁定的错误。

5xx:服务器错误

消息 描述
500 Internal Server Error 请求未完成。服务器遇到不可预知的情况。
500.12 应用程序正忙于在Web服务器上重新启动。
500.13 Web服务器太忙。
500.15 不允许直接请求Global.asa。
500.16 UNC授权凭据不正确。这个错误代码为IIS 6.0所专用。
500.18 URL授权存储不能打开。这个错误代码为IIS 6.0所专用。
500.100 内部ASP错误。
501 Not Implemented 请求未完成。服务器不支持所请求的功能。
502 Bad Gateway 请求未完成。服务器从上游服务器收到一个无效的响应。
502.1 CGI应用程序超时。
502.2 CGI应用程序出错。
503 Service Unavailable 请求未完成。服务器临时过载或宕机。
504 Gateway Timeout 网关超时。
505 HTTP Version Not Supported 服务器不支持请求中指明的HTTP版本。

一般常用的状态码

  • 200 OK:请求成功,服务器成功处理了请求并返回响应。
  • 201 Created:请求成功,服务器成功处理请求并创建了新资源。
  • 400 Bad Request:请求无效,服务器无法理解或处理请求。
  • 401 Unauthorized:未授权,请求要求身份验证。
  • 403 Forbidden:禁止访问,服务器拒绝请求的访问权限。
  • 404 Not Found:资源不存在,请求的资源无法找到。
  • 500 Internal Server Error:服务器内部错误,通常是服务器在处理请求时发生了错误。
  • 503 Service Unavailable:服务不可用,服务器当前无法处理请求,可能因为过载或维护等原因。
响应状态

响应状态是指HTTP响应中的状态行,它包含了HTTP版本、响应状态码和响应状态消息。状态行有如下的一般结构:

HTTP/1.1 200 OK

具体解释如下:

  • HTTP/1.1:表示所使用的HTTP协议版本。
  • 200:表示响应状态码,指示请求成功。
  • OK:表示响应状态消息,提供关于响应状态码的简短描述。

响应状态码用于指示服务器对请求的处理结果,响应状态消息则为状态码提供一些解释性的描述。

HTTP协议定义了一组标准的响应状态码(例如,200、404、500等),每个状态码都有特定的含义和语义。

通过查看响应的状态码和状态消息,客户端可以了解请求的处理结果和服务器返回的状态信息,以便采取相应的处理措施。

响应头(Response Headers):

响应头包含响应报文的各种元数据信息。每行一个头部字段。

响应头(Response Headers)是HTTP响应中包含的元数据信息,用于提供关于响应的附加信息和配置参数。响应头以名称-值的形式表示,并位于HTTP响应的头部部分。

以下是一些常见的响应头:

  1. Content-Type:指示响应主体的媒体类型,例如text/html、application/json等。

  2. Content-Length:指示响应主体的长度(以字节为单位)。

  3. Server:指示服务器的软件名称和版本。

  4. Date:指示响应的日期和时间。

  5. Cache-Control:用于控制缓存行为,例如指示是否可以缓存响应、缓存有效期等。

  6. Set-Cookie:向客户端设置一个HTTP Cookie。

  7. Location:指示客户端重定向到的URL。

  8. Expires:指示响应的过期时间。

  9. Etag:用于标识资源的特定版本。

这只是一小部分常见的响应头,实际上还有许多其他的响应头可以用于传递不同的信息和配置。

响应头提供了关于响应的重要信息,客户端可以根据响应头做出相应的处理。例如,根据Content-Type确定如何解析和处理响应主体的内容,根据Cache-Control确定是否从缓存中获取响应等。

空行(Blank Line):

空行用于分隔头部和响应体,由一个回车换行符组成。

响应体(Response Body):

响应体包含服务器返回的实际数据。响应体的内容根据Content-Type指定的媒体类型而定。例如,对于HTML内容,响应体可能包含HTML标记的文本或网页;对于JSON内容,响应体可能包含JSON格式的数据。

以下是一个示例的HTTP响应报文:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Cache-Control: no-cache

<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
</head>
<body>
    <h1>Hello, World!</h1>
</body>
</html>

在实际的开发中,通过解析HTTP响应报文,可以获取服务器返回的状态码、头部信息和响应体数据,并根据需要进行处理。

Supongo que te gusta

Origin blog.csdn.net/weixin_44369049/article/details/132154276
Recomendado
Clasificación