Todo lo que desea sobre el protocolo HTTP (Daquan) está aquí

** Protocolo http oficial: https://www.cnblogs.com/ranyonsue/p/5984001.html]

Introducción a HTTP

El protocolo HTTP es la abreviatura de Hyper Text Transfer Protocol (Protocolo de transferencia de hipertexto), que es un protocolo de transferencia utilizado para transferir hipertexto desde un servidor World Wide Web (WWW: World Wide Web) a un navegador local.

HTTP es un protocolo de comunicación basado en TCP / IP para transferir datos (archivos HTML, archivos de imagen, resultados de consultas, etc.).

HTTP es un protocolo orientado a objetos perteneciente a la capa de aplicación, que por su método simple y rápido es adecuado para sistemas de información hipermedia distribuidos. Fue propuesto en 1990 y, después de varios años de uso y desarrollo, se ha mejorado y ampliado continuamente. Actualmente, en la WWW se utiliza la sexta edición de HTTP / 1.0. La estandarización de HTTP / 1.1 está en curso y se ha presentado la propuesta HTTP-NG (Next Generation of HTTP).

El protocolo HTTP funciona en una arquitectura cliente-servidor. El navegador, como cliente HTTP, envía todas las solicitudes al servidor HTTP, es decir, el servidor WEB, a través de la URL. El servidor web envía información de respuesta al cliente de acuerdo con la solicitud recibida.

http request-response model.jpg

caracteristica principal

1. Sencillo y rápido: cuando un cliente solicita un servicio del servidor, solo necesita transmitir el método de solicitud y la ruta. Los métodos de solicitud más utilizados son GET, HEAD y POST. Cada método proporciona un tipo diferente de contacto entre el cliente y el servidor. Debido a que el protocolo HTTP es simple, el tamaño del programa del servidor HTTP es pequeño y la velocidad de comunicación es muy rápida.

2. Flexible: HTTP permite la transmisión de cualquier tipo de objeto de datos. El tipo que se transmite está marcado por Content-Type.

3. Sin conexión: el significado de sin conexión es limitar cada conexión para procesar solo una solicitud. Una vez que el servidor haya procesado la solicitud del cliente y recibido la respuesta del cliente, se desconectará. De esta forma, se puede ahorrar tiempo de transmisión.

4. Sin estado: el protocolo HTTP es un protocolo sin estado. La apatridia significa que el protocolo no tiene capacidad de memoria para el procesamiento de transacciones. La falta de estado significa que si la información anterior es necesaria para un procesamiento posterior, debe ser retransmitida, lo que puede resultar en un aumento en la cantidad de datos transmitidos por conexión. Por otro lado, cuando el servidor no necesita información previa, su respuesta es más rápida.
5. Soporta modo B / S y C / S.

HTTP 之 URL

HTTP utiliza identificadores uniformes de recursos (URI) para transmitir datos y establecer conexiones. La URL es un tipo especial de URI que contiene suficiente información para encontrar un determinado recurso.

URL, el nombre completo es UniformResourceLocator, se llama Uniform Resource Locator en chino y es la dirección que se utiliza para identificar un recurso en Internet. Tome la siguiente URL como ejemplo para presentar los componentes de una URL común:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
Como puede verse en la URL anterior, una URL completa incluye las siguientes partes:
1. Parte del protocolo: este La parte del protocolo de la URL es "http:", lo que significa que la página web utiliza el protocolo HTTP. Se pueden utilizar muchos protocolos en Internet, como HTTP, FTP, etc. En este caso, se utiliza el protocolo HTTP. "//" después de "HTTP" es el separador

2. Parte del nombre de dominio: la parte del nombre de dominio de la URL es "www.aspxfans.com". En una URL, también puede utilizar la dirección IP como nombre de dominio.

3. Parte del puerto: el puerto va seguido del nombre de dominio y ":" se utiliza como separador entre el nombre de dominio y el puerto. El puerto no es una parte obligatoria de una URL. Si se omite la parte del puerto, se utilizará el puerto predeterminado

4. Parte del directorio virtual: desde la primera "/" después del nombre de dominio hasta la última "/", es la parte del directorio virtual. El directorio virtual tampoco es una parte obligatoria de una URL. El directorio virtual en este ejemplo es "/ news /"

5. Parte del nombre de archivo: desde el último "/" después del nombre de dominio hasta "?", Es la parte del nombre del archivo, si no hay "?", Comienza desde el último "/" después del nombre de dominio hasta " # ", Es la parte del archivo, si no hay"? "Y" # ", entonces desde el último" / "después del nombre de dominio hasta el final, es la parte del nombre del archivo. El nombre de archivo en este ejemplo es "index.asp". La parte del nombre del archivo no es una parte obligatoria de una URL. Si se omite esta parte, se utilizará el nombre de archivo predeterminado.

6. Parte de anclaje: Desde "#" hasta el final, es la parte de anclaje. La parte de ancla en este ejemplo es "nombre". La parte de ancla no es una parte obligatoria de una URL

7. Parte de parámetro: La parte de "?" A "#" es la parte de parámetro, también conocida como parte de búsqueda y parte de consulta. La parte del parámetro en este ejemplo es "boardID = 5 & ID = 24618 & page = 1". El parámetro puede permitir múltiples parámetros y el "&" se utiliza como separador entre el parámetro y el parámetro.

(Original: http://blog.csdn.net/ergouge/article/details/8185219)

La diferencia entre URI y URL

URI es un identificador de recurso uniforme, que se utiliza para identificar un recurso de forma única.
Cada recurso disponible en la Web, como documentos HTML, imágenes, videoclips, programas, etc., es un URI para ubicar el
URI generalmente consta de tres partes:
①Acceso al mecanismo de
nomenclatura de
recursos ② El nombre de host del recurso ③ El nombre de el recurso en sí, representado por la ruta, con énfasis en los recursos.

La URL es un localizador de recursos uniforme, que es un URI específico, es decir, la URL se puede usar para identificar un recurso y también especifica cómo ubicar el recurso.
URL es una cadena que se utiliza para describir recursos de información en Internet, que se utiliza principalmente en varios programas cliente y programas de servidor de WWW, especialmente el famoso Mosaic.
La URL se puede utilizar para describir varios recursos de información en un formato unificado, incluidos archivos, direcciones de servidor y directorios. La URL generalmente consta de tres partes:
① Protocolo (o modo de servicio llamado)
② Dirección IP del host (que a veces incluye el número de puerto) donde
se almacena el recurso ③ Dirección específica del recurso del host. Como directorio y nombre de archivo, etc.

URN, nombre de recurso uniforme, es para identificar los recursos por su nombre, como mailto: [email protected].
URI es un concepto abstracto de alto nivel que define la identificación uniforme de recursos, mientras que URL y URN son métodos de identificación de recursos específicos. Tanto la URL como la URN son una especie de URI. En términos generales, cada URL es un URI, pero no todos los URI son URL. Esto se debe a que URI también incluye una subcategoría, Uniform Resource Name (URN), que nombra los recursos pero no especifica cómo ubicarlos. Los URI mailto, news e isbn anteriores son todos ejemplos de URN.

En Java URI, una instancia de URI puede representar absoluta o relativa, siempre que cumpla con las reglas de sintaxis de URI. La clase de URL no solo se ajusta a la semántica, sino que también contiene información para ubicar el recurso, por lo que no puede ser relativo.
En la biblioteca de clases de Java, la clase URI no contiene ningún método para acceder a los recursos y su única función es analizar.
Por el contrario, la clase de URL puede abrir una secuencia al recurso.

Solicitud de mensaje de solicitud HTTP

El mensaje de solicitud de que el cliente envía una solicitud HTTP al servidor incluye el siguiente formato:

Consta de cuatro partes: línea de solicitud, encabezado, línea en blanco y datos de solicitud.

Inserte la descripción de la imagen aquí

Http request message structure.png La
línea de solicitud comienza con un símbolo de método, separado por espacios, seguido del URI solicitado y la versión del protocolo.
Obtenga un ejemplo de solicitud, utilizando la solicitud capturada por Charles:
GET /562f25980001b1b106000338.jpg HTTP / 1.1
Host img.mukewang.com
User-Agent Mozilla / 5.0 (Windows NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 51.0 .2704.106 Safari / 537.36
Accept image / webp, image / , /*;q=0.8 Referer
http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN, zh; q = 0.8
La primera parte: la línea de solicitud, que se utiliza para indicar el tipo de solicitud, el recurso al que se accede y la versión HTTP utilizada.
GET indica que el tipo de solicitud es GET, [/562f25980001b1b106000338.jpg] es el recurso al que se accede y el La última parte de la línea indica el utilizado. Es la versión HTTP1.1.

La segunda parte: el encabezado de la solicitud, la parte inmediatamente después de la línea de la solicitud (es decir, la primera línea), se utiliza para explicar la información adicional que utilizará el servidor
desde la segunda línea como el encabezado de la solicitud, y HOST indicará el destino de la solicitud. El agente de usuario, los scripts del lado del servidor y del lado del cliente pueden acceder a él, es una base importante para la lógica de detección del tipo de navegador. Esta información la define su navegador y se envía automáticamente en cada solicitud, etc.

La tercera parte: línea en blanco, se requiere la línea en blanco después del encabezado de la solicitud.
Incluso si los datos de la solicitud en la cuarta parte están vacíos, debe haber una línea en blanco.

Parte 4: Los datos solicitados también se denominan asunto, y se puede agregar cualquier otro dato.
Los datos de la solicitud para este ejemplo están vacíos.

POST 请求 例子 , 使用 Charles 抓取 的 solicitud:
POST / HTTP1.1
Host: www.wrox.com
User-Agent: Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;. NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Tipo de contenido: application / x-www-form-urlencoded
Longitud del contenido: 40
Conexión: Keep-Alive

name = Professional% 20Ajax & publisher = Wiley La
primera parte: línea de solicitud, la primera línea claramente es una solicitud de publicación y la versión http1.1.
La segunda parte: encabezado de solicitud, de la segunda a la sexta línea.
La tercera parte: línea en blanco, línea en blanco en la séptima línea.
La cuarta parte: solicitar datos, la octava línea.

Respuesta de mensaje de respuesta HTTP

En circunstancias normales, el servidor devolverá un mensaje de respuesta HTTP después de recibir y procesar la solicitud enviada por el cliente.

La respuesta HTTP también se compone de cuatro partes, a saber: línea de estado, encabezado del mensaje, línea en blanco y cuerpo de la respuesta.

Inserte la descripción de la imagen aquí


Ejemplo de formato de mensaje de respuesta http.jpg

HTTP / 1.1 200 OK
Fecha: viernes 22 de mayo de 2009 06:07:21 GMT
Tipo de contenido: texto / html; juego de caracteres = UTF-8

La primera parte: la línea de estado se compone de tres partes: número de versión del protocolo HTTP, código de estado y mensaje de estado. La primera línea es la línea de estado, (HTTP / 1.1) indica que la versión HTTP es 1.1, el código de estado es 200 y el mensaje de estado es (ok)

La segunda parte: el encabezado del mensaje, que se utiliza para describir información adicional que utilizará el cliente. La
segunda y tercera líneas son los encabezados del mensaje,
Fecha: la fecha y hora en que se generó la respuesta; Tipo de contenido: HTML (texto / html), el tipo de codificación es UTF-8

La tercera parte: línea en blanco, la línea en blanco después del encabezado del mensaje es necesaria La
cuarta parte: cuerpo de respuesta, la información de texto que el servidor devuelve al cliente.
La parte html después de la línea en blanco es el cuerpo de la respuesta.

Código de estado HTTP

El código de estado consta de tres dígitos. El primer dígito define la categoría de respuesta, que se divide en cinco categorías:

1xx: Información de instrucción: indica que se recibió la solicitud, continuar con el proceso
2xx: Éxito: indica que la solicitud se recibió, comprendió y aceptó con éxito
3xx: Redirigir: Para completar la solicitud, debe realizar más operaciones
4xx: Error del cliente: La solicitud tiene un error de sintaxis O la solicitud no se puede cumplir
5xx: error del lado del servidor: el servidor no cumplió con la solicitud legal
Código de estado común:

200 OK // La solicitud del cliente es exitosa
400 Solicitud incorrecta // La solicitud del cliente tiene un error de sintaxis y el servidor no puede entenderla
401 No autorizado // La solicitud no está autorizada. Este código de estado debe usarse con el campo de encabezado WWW-Authenticate .
403 Prohibido // el servidor recibe la petición, pero se niega a proporcionar el servicio
// el recurso solicitado no encontrado 404 no existe, por ejemplo: que se introduzca la dirección URL incorrecta
500 Internal Server error // el servidor tiene un inesperado error
503 de servidor No disponible // El servidor no puede procesar actualmente la solicitud del cliente, puede volver a la normalidad después de un período de tiempo
Más códigos de estado http://www.runoob.com/http/http-status-codes.html

Métodos de solicitud HTTP
De acuerdo con el estándar HTTP, las solicitudes HTTP pueden utilizar varios métodos de solicitud.
HTTP1.0 define tres métodos de solicitud: métodos GET, POST y HEAD.
HTTP1.1 agrega cinco nuevos métodos de solicitud: métodos OPTIONS, PUT, DELETE, TRACE y CONNECT.

GET solicita la información de la página especificada y devuelve el cuerpo de la entidad.
HEAD es similar a una solicitud de obtención, excepto que no hay contenido específico en la respuesta devuelta. Se utiliza para obtener el
POST del encabezado para enviar datos al recurso especificado para procesar solicitudes (como enviar un formulario o cargar un archivo). Los datos están contenidos en el cuerpo de la solicitud. Las solicitudes POST pueden resultar en la creación de nuevos recursos y / o la modificación de recursos existentes.
PUT Los datos transmitidos desde el cliente al servidor reemplazan el contenido del documento especificado.
DELETE solicita al servidor que elimine la página especificada.
El protocolo CONNECT HTTP / 1.1 está reservado para servidores proxy que pueden cambiar la conexión a un modo de canalización.
OPTIONS permite al cliente ver el rendimiento del servidor.
TRACE se hace eco de la solicitud recibida por el servidor, que se utiliza principalmente para pruebas o diagnósticos.

Cómo funciona HTTP

El protocolo HTTP define cómo un cliente web solicita una página web de un servidor web y cómo el servidor transmite la página web al cliente. El protocolo HTTP utiliza un modelo de solicitud / respuesta. El cliente envía un mensaje de solicitud al servidor. El mensaje de solicitud contiene el método solicitado, la URL, la versión del protocolo, el encabezado de la solicitud y los datos de la solicitud. El servidor responde con una línea de estado. El contenido de la respuesta incluye la versión del protocolo, código de éxito o error, información del servidor, encabezados de respuesta y datos de respuesta.

Los siguientes son los pasos para la solicitud / respuesta HTTP:

1. El cliente se conecta al servidor web
Un cliente HTTP, generalmente un navegador, establece una conexión de socket TCP con el puerto HTTP del servidor web (80 por defecto). Por ejemplo, http://www.oakcms.cn.

2. Envío de solicitudes HTTP
A través de sockets TCP, el cliente envía un mensaje de texto de solicitud al servidor Web, que consta de 4 partes: línea de solicitud, encabezado de solicitud, línea en blanco y datos de solicitud.

3. El servidor acepta la solicitud y devuelve una respuesta HTTP al
servidor web para analizar la solicitud y localizar el recurso solicitado. El servidor escribe una copia del recurso en el socket TCP, que el cliente lee. Una respuesta consta de 4 partes: línea de estado, encabezado de respuesta, línea en blanco y datos de respuesta.

4. Libere la conexión Conexión TCP.
Si el modo de conexión está cerrado, el servidor cierra activamente la conexión TCP, y el cliente cierra pasivamente la conexión y libera la conexión TCP. Si el modo de conexión es keepalive, la conexión permanecerá durante un período. de tiempo, y puede continuar recibiendo durante este tiempo la solicitud;

5. El navegador del cliente analiza el contenido HTML El
navegador del cliente primero analiza la línea de estado y mira el código de estado que indica si la solicitud se realizó correctamente. Luego, se analiza cada encabezado de respuesta y el encabezado de respuesta informa que lo siguiente es un documento HTML de pocos bytes y el juego de caracteres del documento. El navegador del cliente lee el HTML de los datos de respuesta, lo formatea de acuerdo con la sintaxis HTML y lo muestra en la ventana del navegador.

Por ejemplo: Escriba la URL en la barra de direcciones del navegador y presione Enter, pasará por el siguiente proceso:

1. El navegador solicita al servidor DNS que resuelva la dirección IP correspondiente al nombre de dominio en la URL;

2. Una vez resuelta la dirección IP, establezca una conexión TCP con el servidor según la dirección IP y el puerto predeterminado 80;

3. El navegador envía una solicitud HTTP para leer el archivo (el archivo correspondiente al nombre de dominio en la URL), y el mensaje de solicitud se envía al servidor como los datos del tercer mensaje en el protocolo de enlace de tres vías TCP;

4. El servidor responde a la solicitud del navegador y envía el texto html correspondiente al navegador;

5. Libere la conexión TCP;

6. El navegador mostrará el texto html y mostrará el contenido;

La diferencia entre solicitud GET y POST solicitud
GET
GET / books /? Sex = man & name = Professional HTTP / 1.1
Host: www.wrox.com
User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; rv : 1.7.6)
Gecko / 20050225 Firefox / 1.0.1
Conexión: Keep-Alive
Tenga en cuenta que la última línea es una línea en blanco

POST 请求
POST / HTTP / 1.1
Host: www.wrox.com
User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1.7.6)
Gecko / 20050225 Firefox / 1.0.1
Content- Tipo: application / x-www-form-urlencoded
Contenido-Longitud: 40
Conexión: Keep-Alive

name = Professional% 20Ajax & publisher = Wiley
1. GET envío, los datos solicitados se adjuntarán a la URL (es decir, los datos se colocarán en el encabezado del protocolo HTTP), divida la URL y los datos de transmisión con?, se conectarán varios parámetros con &;
por ejemplo: login .action? name = hyddd & password = idontknow & verify =% E4% BD% A0% E5% A5% BD. Si los datos son letras / números en inglés, envíelos como están, si es un espacio, conviértalos a +, si son caracteres chinos / otros, luego cifre directamente la cadena con BASE64, por ejemplo:% E4% BD% A0% E5% A5% BD, donde XX en% XX es la representación ASCII del símbolo en notación hexadecimal.

Envío POST: coloque los datos enviados en el cuerpo del paquete HTTP. La fuente roja en el ejemplo anterior indica los datos de transmisión reales

Por lo tanto, los datos enviados por GET se mostrarán en la barra de direcciones, mientras que los enviados por POST, la barra de direcciones no cambiará.
2. El tamaño de los datos transmitidos: En primer lugar, se indica que el protocolo HTTP no limita el tamaño de los datos transmitidos y la especificación del protocolo HTTP no restringe el tamaño de los datos transmitidos. La longitud de la URL está restringida.

Las principales limitaciones en el desarrollo real son:

GET: Ciertos navegadores y servidores tienen restricciones en la longitud de las URL. Por ejemplo, el límite de IE en la longitud de las URL es 2083 bytes (2K + 35). Para otros navegadores, como Netscape, FireFox, etc., no hay límite de longitud en teoría, y el límite depende del soporte del sistema operativo.

Por lo tanto, para el envío GET, los datos de transmisión estarán limitados por la longitud de la URL.

POST: Dado que el valor no se pasa a través de la URL, los datos no están limitados en teoría. Pero, de hecho, cada servidor WEB estipulará un límite en el tamaño de los datos de envío posterior, y Apache e IIS6 tienen sus propias configuraciones.

3. Seguridad

La seguridad de POST es mayor que la de GET. Por ejemplo, si envía datos a través de GET, el nombre de usuario y la contraseña aparecerán en texto sin formato en la URL, porque (1) el navegador puede almacenar en caché la página de inicio de sesión; (2) otros pueden ver el historial del navegador, luego otros pueden obtener su cuenta y contraseña, además, usar GET para enviar datos también puede causar un ataque de falsificación de solicitud entre sitios

4. Los protocolos Http get, post, soap se ejecutan en http

(1) obtener: el parámetro de solicitud es una secuencia de pares clave / valor (cadena de consulta).
La longitud de la cadena de consulta adjunta a la URL está limitada por el navegador web y el servidor web (por ejemplo, IE admite hasta 2048 caracteres ). No es adecuado para transferir grandes conjuntos de datos al mismo tiempo, es muy inseguro

(2) publicación: Los parámetros de la solicitud se transmiten en una parte diferente del encabezado http (cuerpo de la entidad con nombre). Esta parte se usa para transmitir información del formulario, por lo que el tipo de contenido debe establecerse en: application / x-www-form -urlencoded. La publicación está diseñada para admitir campos de usuario en formularios web y sus parámetros también se transmiten como pares clave / valor.
Pero: no admite tipos de datos complejos, porque la publicación no define la semántica y las reglas de la estructura de datos de transmisión.

(3) jabón: Es una versión especial de la publicación http. Sigue un formato de mensaje xml especial y el
tipo de contenido se establece en: texto / xml. Cualquier dato puede ser xml.

El protocolo Http define muchos métodos para interactuar con el servidor, los más básicos de los cuales son GET, POST, PUT, DELETE. Una dirección URL se usa para describir un recurso en la red, y HTTP en GET, POST, PUT, DELETE corresponde a las cuatro operaciones de verificar, modificar, agregar y eliminar este recurso. Nuestros más comunes son GET y POST. GET se usa generalmente para obtener / consultar información de recursos, y POST generalmente se usa para actualizar la información de recursos.

Veamos la diferencia entre GET y POST

Los datos enviados por GET se colocarán después de la URL. Separe la URL y transmita los datos con?. Los parámetros están conectados por &, como EditPosts.aspx? Name = test1 & id = 123456. El método POST es poner los datos enviados en el cuerpo del paquete HTTP.

El tamaño de los datos enviados por GET es limitado (porque el navegador tiene limitaciones en la longitud de la URL), mientras que los datos enviados por el método POST no están limitados.

El método GET requiere el uso de Request.QueryString para obtener el valor de la variable, mientras que el método POST usa Request.Form para obtener el valor de la variable.

Enviar datos en modo GET traerá problemas de seguridad. Por ejemplo, al enviar datos a través de GET, el nombre de usuario y la contraseña aparecerán en la URL. Si la página se puede almacenar en caché o otras personas pueden acceder a la máquina, se puede ver desde el Historial Registre la cuenta y la contraseña del usuario.

Supongo que te gusta

Origin blog.csdn.net/langezuibang/article/details/107055344
Recomendado
Clasificación