Protocolo HTTP
Http
El protocolo se basa en tcp/ip
el protocolo y es un protocolo de capa de aplicación. El puerto predeterminado es 80
: HTTP
sin conexión y sin estado.
Mensaje HTTP
HTTP
Es un ASCII
código para la transmisión y tcp/ip
una especificación de la capa de aplicación basada en el protocolo. La especificación divide http
la 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
GET
: Obtener recursos del servidorPUT
: Escribir documentoHead
: Obtén solo la primera partePOST
: Enviar datos, como formulariosDelete
:EliminarOptions
: Ver métodos de solicitud admitidos por el servidorTrace
: Seguimiento de mensajes
request-url
: La dirección del recurso solicitado, queurl
generalmente contiene varias partes:协议、主机、端口、URI
version
:HTTP
Versión del protocoloHeaders
: Encabezado de solicitudBody
: 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 servidorstatus
: Devuelve el código de estado. Cada código de estado tiene un significado diferente
200
: La solicitud fue exitosa301
: Redireccionamiento permanente302
: Redireccionamiento temporal304
: El recurso no se modifica400
: Solicitud de error401
:no certificado403
:Permiso denegado404
: No existe tal recurso500
: Error de servidor interno502
: La puerta de enlace o el proxy recibió una respuesta no válida del servidor504:
Tiempo de espera de puerta de enlace o proxy
reason-phrase
: Frase de motivo. Tales como:timeout
esperaheaders
: Vuelve a la cabezaentity-body
: Volver al cuerpo / contenido principal
Nota:
4xx
El código de estado es generalmente un error del cliente.5xx
El código de estado es generalmente un error del servidor
Enlace largo HTTP
HTTP
Con el 请求<——>应答
modo, cuando se usa el keep-alive
modo 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-alive
modo, keep-alive
la 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.0
versió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.1
versió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.1
versiones HTTP
Lakeep-alive
forma más sencilla es mantener latcp
conexión actual- Es imposible mantener un enlace largo todo el tiempo, como :, lo
keep-alive: timeout=5,max=100
que significa que estetcp
canal de conexión se puede mantener5s
y puede recibir100次
solicitudes como máximo . Entonces se desconectará HTTP
Es un protocolo sin estado ykeep-alive
no hay garantía de que la conexión entre C y S esté activa, alHTTP 1.1
igual 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 dekeep-alive
la 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?
- Determine si los datos han alcanzado el
Content-Length
tamaño - Utilice
chunked
códigos para emitir juicios. El archivo generado dinámicamente no tieneContent-Length
encabezado, se transmite en bloques y loschunked
datos codificados tienen unchunked
bloque vacío al final , que indica el final de esta transmisión. PeroHTTP 2.0
esta función no se usa en la versión,HTTP 2.0
viene con transmisión
Encabezado de codificación de transferencia
Transfer-Encoding
Es un HTTP
encabezado 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 HTTP
el Transfer-Encoding
valor de un mensaje es chunked
, entonces el cuerpo del mensaje se compone de un número indeterminado de bloques y termina con el último 0
bloque 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:
chunked
La 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.chunked
La ventaja es que el servidor puede enviar el contenido mientras generaHTTP 2.0
La versión no es compatiblechunked
porqueHTTP 2.0
tiene su propiostreaming
mé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 orgin
en la web
aplicació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
3
uno de los siguientes
HEAD
GET
POST
HTTP
La información del encabezado no excede los siguientes campos
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type
: Limitado a tres valoresapplication/x-www-form-urlencoded、text/plain、mutiport/form-data
Solicitudes complejas entre dominios Las solicitudes entre dominios de
carga generarán dos http
solicitudes, 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
- Agregar servidor relacionado con dominios cruzados
Header
- El cliente trae un encabezado más allá del dominio cruzado permitido
- El cliente elimina los encabezados redundantes
- 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
- Ignore la caché, agregue una marca de tiempo a cada archivo en el párrafo anterior y acceda directamente a la fuente
- Si es causado por la caché local del navegador, verifique el código del front-end (si hay una
2
solicitud) - 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 IP
la restricción de la interfaz Ethernet en la capa.
Si es necesario enviar la IP
capa <= 1500 Byte
de datos, solo uno IP包
puede completar la tarea. Si hay > 1500 Byte
datos 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 header
y tcp options
, MSS
se tcp
utilizan para limitar el número máximo de bytes enviados por la capa de aplicación. Si MTU = 1500
entoncesMSS = 1500 - 20(tcp header) - 20(tcp options) = 1460
para resumir
Este artículo presenta la HTTP
solicitud, respuesta, encabezado, codificación, dominio cruzado, enlace largo, MSS, MTU, etc. del protocolo. Los desarrolladores experimentados deben saber que HTTP
muchas funciones en la capa, como enlaces largos, almacenamiento en caché, codificación, etc., se logran mediante HEADER
, por lo Header
que HTTP
han asumido un papel muy importante en ella.
Header Header Header Header Header Header Header Header Header Header Header