Notas de estudio HTTP 1-HTTP Daquan

Protocolo HTTP

HttpEl protocolo se basa en tcp/ipel protocolo y es un protocolo de capa de aplicación. El puerto predeterminado es 80: HTTPsin conexión y sin estado.

Mensaje HTTP

HTTPEs un ASCIIcódigo para la transmisión y tcp/ipuna especificación de la capa de aplicación basada en el protocolo. La especificación divide httpla solicitud en tres partes:状态行、头部、主体

Solicitar solicitud

La solicitud se divide en tres partes:状态行、头部、主题(可选)

<Method> <request-url> <version>
<Headers>

<entity-body>
  • Method: Método de solicitud
  1. GET: Obtener recursos del servidor
  2. PUT: Escribir documento
  3. Head: Obtén solo la primera parte
  4. POST: Enviar datos, como formularios
  5. Delete:Eliminar
  6. Options: Ver métodos de solicitud admitidos por el servidor
  7. Trace: Seguimiento de mensajes
  • request-url: La dirección del recurso solicitado, que urlgeneralmente contiene varias partes:协议、主机、端口、URI
  • version: HTTPVersión del protocolo
  • Headers: Encabezado de solicitud
  • Body: Cuerpo de la solicitud

La respuesta devuelve datos

La devolución se divide en tres partes:状态行、头部、主题(可选)

<Version> <status> <reason-phrase>
<Headers>

<entity-body>
  • version: Versión del protocolo del servidor
  • status: Devuelve el código de estado. Cada código de estado tiene un significado diferente
  1. 200: La solicitud fue exitosa
  2. 301: Redireccionamiento permanente
  3. 302: Redireccionamiento temporal
  4. 304: El recurso no se modifica
  5. 400: Solicitud de error
  6. 401:no certificado
  7. 403:Permiso denegado
  8. 404: No existe tal recurso
  9. 500: Error de servidor interno
  10. 502: La puerta de enlace o el proxy recibió una respuesta no válida del servidor
  11. 504: Tiempo de espera de puerta de enlace o proxy
  • reason-phrase: Frase de motivo. Tales como: timeoutespera
  • headers: Vuelve a la cabeza
  • entity-body: Volver al cuerpo / contenido principal

Nota:

  • 4xxEl código de estado es generalmente un error del cliente.
  • 5xxEl código de estado es generalmente un error del servidor

Enlace largo HTTP

HTTPCon el 请求<——>应答modo, cuando se usa el keep-alivemodo no modo, cada solicitud, el cliente y el servidor deben establecer una nueva conexión y desconectarse inmediatamente después de la finalización ( sin estado ).

Cuando se usa el keep-alivemodo, keep-alivela conexión en ambos extremos es válida durante mucho tiempo. Una vez completada la solicitud, la conexión no se desconectará inmediatamente. Cuando C tiene una solicitud posterior, la conexión se puede usar directamente sin la necesidad de un protocolo de enlace de tres vías. Reducir los gastos generales.

HTTP versión 1.0

  • En la http 1.0versión, debe mostrar el encabezado especificado para crear un enlace largo.
  • Encabezado: Connection: keep-alive(es necesario especificar tanto el cliente como el servidor)

Versión HTTP 1.1

  • En la http 1.1versión, el valor predeterminado es un enlace largo y no se requiere un encabezado adicional. Pero si no desea mantener un enlace largo, puede especificar que se cierre el encabezado.
  • cabeza:Connection: close

Nota:

  • La mayoría de los navegadores actualmente son HTTP 1.1versiones
  • HTTPLa keep-aliveforma más sencilla es mantener la tcpconexión actual
  • Es imposible mantener un enlace largo todo el tiempo, como :, lo keep-alive: timeout=5,max=100que significa que este tcpcanal de conexión se puede mantener 5sy puede recibir 100次solicitudes como máximo . Entonces se desconectará
  • HTTPEs un protocolo sin estado y keep-aliveno hay garantía de que la conexión entre C y S esté activa, al HTTP 1.1igual que la versión. La única garantía es que se le notificará cuando se cierre la conexión actual. Por lo tanto, no permita que el programa dependa de keep-alivela función Keep-Alive, de lo contrario, habrá peligros ocultos inesperados.
  • Después de usar el enlace largo, ¿cómo saben C o S que esta transmisión ha terminado?
  1. Determine si los datos han alcanzado el Content-Lengthtamaño
  2. Utilice chunkedcódigos para emitir juicios. El archivo generado dinámicamente no tiene Content-Lengthencabezado, se transmite en bloques y los chunkeddatos codificados tienen un chunkedbloque vacío al final , que indica el final de esta transmisión. Pero HTTP 2.0esta función no se usa en la versión, HTTP 2.0viene con transmisión

Encabezado de codificación de transferencia

Transfer-EncodingEs un HTTPencabezado que se utiliza para marcar el formato de transmisión del mensaje. Aunque en teoría puede haber muchos valores, en HTTP规范realidad solo hay un valor definido en el actual:chunked

Si HTTPel Transfer-Encodingvalor de un mensaje es chunked, entonces el cuerpo del mensaje se compone de un número indeterminado de bloques y termina con el último 0bloque de tamaño.

Cada bloque no vacío comienza con el número de bytes de datos contenidos en el bloque (hexadecimal), seguido de uno CRLF(retorno de carro y salto de línea), y luego los datos en sí.

Nota:

  • chunkedLa transmisión no puede conocer la longitud del contenido de antemano y solo se puede juzgar por el último bloque vacío, por lo que para las solicitudes de descarga, no hay forma de ver el progreso de la descarga.
  • chunkedLa ventaja es que el servidor puede enviar el contenido mientras genera
  • HTTP 2.0La versión no es compatible chunkedporque HTTP 2.0tiene su propio streamingmétodo de transmisión.

Dominio cruzado HTTP

Origen cruzado de intercambio de recursos ( CORS) es un mecanismo que utiliza datos adicionales http头部que indican al navegador, permitiendo una carrera orginen la webaplicación se concederá acceso sin el recurso especificado del servidor de origen.

Cuando un recurso 不同的域、协议、端口solicita un recurso del servidor donde se encuentra el recurso en sí , el recurso inicia una跨域HTTP请求

Simples cruzadas
requisitos de dominio para peticiones entre dominios simples:

  • El método de solicitud es 3uno de los siguientes
  1. HEAD
  2. GET
  3. POST
  • HTTPLa información del encabezado no excede los siguientes campos
  1. Accept
  2. Accept-Language
  3. Content-Language
  4. Last-Event-ID
  5. Content-Type: Limitado a tres valores application/x-www-form-urlencoded、text/plain、mutiport/form-data

Solicitudes complejas entre dominios Las solicitudes entre dominios de
carga generarán dos httpsolicitudes, una solicitud de verificación previa ( options) y una solicitud entre dominios; el servidor debe realizar soporte entre dominios para ambas solicitudes

Solicitud de verificación previa: principalmente verifique de antemano si el servidor admite el método de solicitud y el encabezado

¿Cómo manejar las solicitudes entre dominios?
Dividido en las siguientes tres situaciones:

  • El servidor no admite dominios cruzados
  1. Agregar servidor relacionado con dominios cruzadosHeader
  • El cliente trae un encabezado más allá del dominio cruzado permitido
  1. El cliente elimina los encabezados redundantes
  2. Servidor más soporte de encabezado redundante
  • No se permiten dominios cruzados debido al almacenamiento en caché, que es común en el acceso a recursos estáticos
  1. Ignore la caché, agregue una marca de tiempo a cada archivo en el párrafo anterior y acceda directamente a la fuente
  2. Si es causado por la caché local del navegador, verifique el código del front-end (si hay una 2solicitud)
  3. Todos los cachés fuera del navegador que causaron el problema, solo se verificaron uno por uno

Encabezado relacionado con varios dominios

cabeza Descripción
Acceso-Control-Permitir-Origen: | * Permitir solicitudes para dominios específicos
Métodos de permiso de control de acceso: Métodos de solicitud permitidos
Access-Control-Allow-Headers:
Cabeza permitida
Access-Control-Allow-credentials: verdadero Permitir cookies

La diferencia entre MTU y MSS

MTU: Maximum Transmit Unit, La unidad de transmisión máxima, es decir, el tamaño máximo de datos que la interfaz física ( 数据链路层) proporciona a la capa superior ( IP层) a la vez; tomando como ejemplo la Ethernet de uso común, por defecto MTU=1500Byte, esta es IPla restricción de la interfaz Ethernet en la capa.

Si es necesario enviar la IPcapa <= 1500 Bytede datos, solo uno IP包puede completar la tarea. Si hay > 1500 Bytedatos para transmitir, para completar la transmisión se fragmentará, pero todos los fragmentos tienen una característica:IP Header ID相同

MSS:Maximum Segment Size, El tamaño máximo de segmento. Fabric comprende tcp headery tcp options, MSSse tcputilizan para limitar el número máximo de bytes enviados por la capa de aplicación. Si MTU = 1500entoncesMSS = 1500 - 20(tcp header) - 20(tcp options) = 1460

Inserte la descripción de la imagen aquí


para resumir

Este artículo presenta la HTTPsolicitud, respuesta, encabezado, codificación, dominio cruzado, enlace largo, MSS, MTU, etc. del protocolo. Los desarrolladores experimentados deben saber que HTTPmuchas funciones en la capa, como enlaces largos, almacenamiento en caché, codificación, etc., se logran mediante HEADER, por lo Headerque HTTPhan asumido un papel muy importante en ella.

Header Header Header Header Header Header Header Header Header Header Header

Supongo que te gusta

Origin blog.csdn.net/Free_time_/article/details/107449776
Recomendado
Clasificación