Clase HTTP 10 - Código de estado de respuesta

fondo

Los componentes de la línea de solicitud en el mensaje HTTP, incluidos el método de solicitud y el URI. Con la línea de solicitud, el encabezado de la solicitud se forma agregando los siguientes campos de encabezado, que se pueden enviar al servidor a través del protocolo TCP/IP.
El servidor recibe el mensaje de solicitud y necesita procesarlo después del análisis.La lógica comercial específica es variada, pero al final debe deletrear un mensaje de respuesta y enviarlo de vuelta al cliente.
El mensaje de respuesta se compone del encabezado de la respuesta y los datos del cuerpo de la respuesta, y el encabezado de la respuesta se compone de la línea de estado y el campo del encabezado.
inserte la descripción de la imagen aquí
La parte de Versión al principio es el número de versión del protocolo HTTP, generalmente HTTP/1.1, que no es muy útil.
La parte de Motivo detrás es la frase de motivo, que es una breve descripción de texto del código de estado, como "OK", "No encontrado", etc., y también se puede personalizar. Pero solo existe para la compatibilidad con los primeros clientes de texto, y la información proporcionada es muy limitada, y la mayoría de los clientes actuales la ignorarán.

Lo único útil en la línea de estado es el código de estado (Código de estado) en el medio. Es un número decimal, que representa el resultado del procesamiento del servidor a la petición en forma de código, al igual que el código de error devuelto por la función cuando solemos escribir un programa.
Su significado no es solo un error, sino que, lo que es más importante, expresa el "estado" del procesamiento de datos HTTP. El cliente puede cambiar el estado de procesamiento de acuerdo con el código, como continuar enviando solicitudes, cambiar de protocolo, redirigir saltos, etc. Hay un poco de medios de conversión de estado TCP.

código de estado

El estándar RFC divide los códigos de estado en cinco categorías y usa el primer dígito del número para indicar la clasificación, mientras que 0-99 no se usa, por lo que el rango real disponible de códigos de estado se reduce considerablemente, de 000~999 a 100. -599.
Los significados específicos de estas cinco categorías son:
1××: información rápida, que indica que el procesamiento del protocolo actual se encuentra en un estado intermedio y aún se requieren operaciones de seguimiento;
2××: éxito, el mensaje ha sido recibido y procesado correctamente;
3××: redirección, la ubicación del recurso ha cambiado y el cliente necesita reenviar la solicitud;
4××: error del cliente, el mensaje de solicitud es incorrecto y el servidor no puede procesarlo;
5××: error del servidor, el servidor tiene un error interno al procesar la solicitud.
En el protocolo HTTP, no es responsabilidad del cliente o del servidor entender y aplicar correctamente estos códigos de estado, sino responsabilidad conjunta de ambas partes.
Como iniciador de la solicitud, el cliente necesita saber si la solicitud se procesa correctamente a través del código de estado después de obtener el mensaje de respuesta, si debe enviar la solicitud nuevamente y cuál es el motivo del error. Solo así se podrá realizar el siguiente paso, ya sea enviar una nueva solicitud, o corregir el error y reenviar la solicitud.
Como receptor de la solicitud, el servidor también debe hacer un buen uso del código de estado. Al procesar una solicitud, seleccione el código de estado más apropiado para responder al cliente, informe al cliente sobre el resultado del procesamiento e indíquele cómo actuar a continuación. Especialmente cuando ocurre un error, intente no devolver simplemente códigos de estado ambiguos como 400 y 500.
Actualmente hay 41 códigos de estado en el estándar RFC, pero la definición de códigos de estado está abierta y permite la autoextensión. Por lo tanto, los servidores web como Apache y Nginx han definido algunos códigos de estado de propiedad. Si desarrolla aplicaciones web usted mismo, también puede definir nuevos códigos sin conflictos.

Ejemplo de código de estado

1××

Los códigos de estado 1XX pertenecen a la información rápida, que es un estado intermedio del procesamiento del protocolo y rara vez se usa en la práctica.
Uno que vemos ocasionalmente es "101 Switching Protocols". Significa que el cliente usa el campo de encabezado Actualizar para solicitar cambiar a otros protocolos basados ​​en el protocolo HTTP para continuar la comunicación, como WebSocket. Y si el servidor también acepta cambiar el protocolo, enviará el código de estado 101, pero la transmisión de datos posterior ya no utilizará HTTP.

2××

El código de estado 2×× indica que el servidor recibió y procesó con éxito la solicitud del cliente, que también es el código de estado que el cliente está más dispuesto a ver.
"200 OK" es el código de estado de éxito más común, que indica que todo es normal y que el servidor devolvió el resultado del procesamiento esperado por el cliente. Si se trata de una solicitud que no es HEAD, generalmente habrá datos del cuerpo después del encabezado de respuesta. .
"204 Sin contenido" es otro código de estado de éxito muy común, su significado es básicamente el mismo que "200 OK", pero no hay datos del cuerpo después del encabezado de respuesta. Por lo que es necesario que el servidor web distinga correctamente entre 200 y 204.
"206 Contenido parcial" es la base de la descarga fragmentada HTTP o la carga reanudable. Aparece cuando el cliente envía una "solicitud de rango" para solicitar datos parciales del recurso. Es lo mismo que 200, y el servidor procesó la solicitud con éxito. pero el cuerpo Los datos en no son todo el recurso, sino una parte de él.
El código de estado 206 suele ir acompañado del campo de encabezado "Rango de contenido", que indica el rango específico de los datos del cuerpo en el mensaje de respuesta para que el cliente confirme, por ejemplo, "Rango de contenido: bytes 0-99/2000". , lo que significa que esta vez se recuperan los primeros 100 bytes del total de 2000 bytes.

3××

El código de estado 3×× indica que el recurso solicitado por el cliente ha cambiado, y el cliente debe reenviar la solicitud para obtener el recurso con una nueva URI, lo que comúnmente se denomina “redireccionamiento”, incluyendo los famosos redireccionamientos 301 y 302 .
"301 Movido permanentemente" se conoce comúnmente como "redireccionamiento permanente", lo que significa que el recurso solicitado ya no existe y se debe acceder nuevamente con una nueva URI.
Similar a "302 Found", que solía describir la frase "Movido temporalmente", comúnmente conocido como "redireccionado temporalmente", lo que significa que el recurso solicitado todavía está allí, pero se debe acceder temporalmente con otro URI.
Tanto 301 como 302 utilizarán el campo Ubicación en el encabezado de respuesta para indicar el URI que se redirigirá más adelante. El efecto final es muy similar, y el navegador redirigirá al nuevo URI. La diferencia fundamental entre los dos radica en la semántica, uno es "permanente" y el otro es "temporal", por lo que existe una gran brecha en los escenarios y el uso.
Por ejemplo, si su sitio web se actualiza a HTTPS, no se utilizará el HTTP original, que es "permanente", por lo que debe configurar la redirección 301 para cambiar todo el tráfico HTTP a HTTPS.
Para otro ejemplo, el fondo del sitio web necesita mantenimiento del sistema esta noche, y el servicio no está disponible temporalmente. Esto es "temporal". Se puede configurar como una redirección 302, y el tráfico se cambia temporalmente a una página de notificación estática. El navegador sabrá esto cuando vea este 302 Es solo una situación temporal, no se realizará ninguna optimización de caché y se accederá a la dirección original al día siguiente.
"304 No modificado" es un código de estado más interesante, que se usa para solicitudes condicionales como If-Modified-Since, que indica que el recurso no se ha modificado y se usa para el control de caché. No tiene el significado habitual de saltar, pero puede entenderse como "redireccionar a un archivo en caché" (es decir, "redireccionamiento de caché").

4××

El código de estado de clase 4 × × significa que el mensaje de solicitud enviado por el cliente es incorrecto y el servidor no puede procesarlo, que es el verdadero significado de "código de error".
"400 Bad Request" es un código de error general que indica que hay un error en el mensaje de solicitud, pero no dice específicamente si el formato de los datos es incorrecto, falta el encabezado de la solicitud o el URI es demasiado largo. solo un error general El cliente ve solo 400 Estará "confundido" y "abrumado". Por lo tanto, al desarrollar aplicaciones web, debe intentar evitar devolver 400 al cliente, pero use otros códigos de estado con significados más claros.
"403 Prohibido" no es en realidad un error en la solicitud del cliente, sino que significa que el servidor prohíbe el acceso al recurso. Puede haber una variedad de razones, como información sensible, prohibición legal, etc. Si el servidor es más amigable, puede especificar las razones para rechazar la solicitud en el cuerpo, pero en realidad, generalmente da una "puerta cerrada". directamente.
"404 Not Found" puede ser el código de estado que vemos con más frecuencia y el que menos deseamos ver. Su significado original es que el recurso no se encuentra en el servidor, por lo que no se puede proporcionar al cliente. Pero ahora ha sido "utilizado en exceso". Mientras el servidor esté "descontento", puede dar un 404, y no tenemos forma de saber si realmente no se encuentra, o si hay otras razones. Los 403 son aún más molestos. .
Algunos de los códigos restantes en 4 × × explican claramente la causa del error, que son fáciles de entender. Comúnmente utilizados en el desarrollo son:
405 Método no permitido: ciertos métodos no están permitidos para operar recursos, por ejemplo, POST no está permitido , solo se permite GET;
406 No aceptable: el recurso no puede cumplir las condiciones solicitadas por el cliente, como solicitar chino pero solo inglés;
408 Tiempo de espera de solicitud: la solicitud superó el tiempo de espera y el servidor esperó demasiado tiempo;
409 Conflicto: Múltiple las solicitudes han entrado en conflicto, lo que puede interpretarse como una condición de carrera múltiple cuando los subprocesos son simultáneos;
413 Entidad de solicitud demasiado grande: el cuerpo del mensaje de solicitud es demasiado grande;
414 URI de solicitud demasiado largo: el URI en la línea de solicitud es demasiado grande;
429 Demasiadas solicitudes: el cliente envía demasiadas solicitudes, generalmente debido a la política de restricción de conexión del servidor;
431 Campos de encabezado de solicitud demasiado grandes: un campo determinado en el encabezado de solicitud o general demasiado grande;

5××

El código de estado 5XX indica que el mensaje de solicitud del cliente es correcto, pero el servidor tiene un error interno durante el procesamiento y no puede devolver los datos de respuesta adecuados, que es el "código de error" del lado del servidor.
"Error interno del servidor 500" es similar a 400 y también es un código de error común. No sabemos qué error ocurrió en el servidor. Sin embargo, esto debe considerarse algo bueno para el servidor. Por lo general, la información detallada dentro del servidor, como la pila de llamadas de la función de error, no debe comunicarse al mundo exterior. Aunque no es propicio para la depuración, puede evitar que los piratas informáticos husmeen o analicen.
"501 no implementado" significa que la función solicitada por el cliente aún no es compatible. Este código de error es "moderado" que 500, y tiene el mismo significado que "apertura pronto, espérelo con ansias", pero es difícil para decir cuándo se "abrirá".
"502 Bad Gateway" suele ser un código de error devuelto por el servidor como puerta de enlace o proxy, lo que indica que el servidor en sí está funcionando normalmente y se produjo un error al acceder al servidor back-end, pero se desconoce la causa específica del error. .
"503 Servicio no disponible" significa que el servidor está actualmente muy ocupado y no puede responder al servicio temporalmente. Cuando navegamos por Internet, a veces el mensaje "El servicio de red está ocupado, inténtelo de nuevo más tarde" es el código de estado 503.
503 es un estado "temporal". Es probable que el servidor no esté tan ocupado después de unos segundos y pueda continuar brindando servicios, por lo que generalmente hay un campo "Reintentar después" en el mensaje de respuesta 503, que indica que el el cliente puede Cuánto tiempo debe esperar para intentar enviar la solicitud nuevamente.

resumen

  1. El código de estado indica el resultado del procesamiento del servidor a la solicitud en el mensaje de respuesta;
  2. La frase de motivo después del código de estado es una descripción de texto simple, que se puede personalizar;
  3. El código de estado es un número decimal de tres dígitos, dividido en cinco categorías, del 100 al 599;
  4. Los códigos de estado 2 × × indican éxito, los más utilizados son 200, 204, 206;
  5. Los códigos de estado 3 × × indican redirección, los más utilizados son 301, 302, 304;
  6. Los códigos de estado 4 × × indican errores del cliente, los más utilizados son 400, 403, 404;
  7. Los códigos de estado 5 × × indican errores del servidor, los más utilizados son 500, 501, 502 y 503.

PD: Este artículo es una nota después de ver Geek.

Supongo que te gusta

Origin blog.csdn.net/Elon15/article/details/130673650
Recomendado
Clasificación