JavaWeb | Formato de solicitud y respuesta del protocolo HTTP

1. ¿Qué es HTTP?

Conceptos básicos de las redes informáticas: Protocolos de red
. Hay muchos tipos de protocolos de red, algunos de los cuales son familiares, IP, TCP, UD... También existe un protocolo muy utilizado, HTTP. El protocolo HTTP es más probable que el protocolo más utilizado en nuestro desarrollo futuro.

HTTP : (nombre completo "Protocolo de transferencia de hipertexto") es un protocolo de capa de aplicación muy utilizado

HTTP está en la capa de aplicación de la pila de protocolos de cinco capas TCP/IP,
HTTP se basa en TCP en la capa de transporte (no es lo suficientemente riguroso, HTTP/1, HTTP/2 se basan en TCP y la última versión es HTTP/ 3, que se basa en UDP , pero la Internet actual es absolutamente. La mayor parte del HTTP utilizado es HTTP/1.1 )

Los protocolos de la capa de transporte se ocupan principalmente de la transmisión de datos de un extremo a otro. TCP se centra en la transmisión confiable de
protocolos de capa de aplicación.Desde la perspectiva de la aplicación del programa, los datos transmitidos deben usarse específicamente.

Los programadores suelen personalizar los protocolos de la capa de aplicación y diseñarlos de acuerdo con escenarios de demanda reales.

Sin embargo, en el círculo de los grandes programadores, el nivel es desigual,
por lo que algunos grandes inventaron algunos protocolos muy útiles y dejaron que todos los copiaran directamente, HTTP es un representante típico de ellos.

Aunque se ha diseñado HTTP, su escalabilidad es muy fuerte, lo que permite a los programadores transmitir diversa información de datos personalizada de acuerdo con las necesidades reales.

Los escenarios de aplicación específicos de HTTP son utilizados por todos todos los días. Siempre que abra un navegador y abra un sitio web al azar, en este momento en realidad está usando HTTP, o abre una aplicación móvil y carga algunos datos de manera casual
. , existe una alta probabilidad de que también se utilice HTTP


2. Formato del protocolo HTTP

1. Formato del acuerdo

Formato del protocolo: ¿Cómo se organizan los datos?

UDP : encabezado (puerto de origen, puerto de destino, longitud, suma de comprobación) + carga útil

Los protocolos como UDP/TCP/IP son todos protocolos "binarios" y, a menudo, es necesario comprender los bits binarios.

HTTP es un protocolo de formato de texto (no es necesario comprender los bits binarios específicos, solo comprender el formato de texto) (formato de texto, por lo que es más conveniente para los ojos humanos observar)

¿Cómo puedo ver el formato del mensaje HTTP?

  • De hecho, puede utilizar algunas "herramientas de captura de paquetes" para obtener el proceso de interacción HTTP específico, las solicitudes y las respuestas.

TCP/UDP también se puede analizar con la ayuda de herramientas de captura de paquetes.

La herramienta de captura de paquetes es en realidad un programa de terceros que actúa como un "proxy" en el proceso de comunicación de la red. Por ejemplo, estoy en el dormitorio y no quiero comprar comida, así que pido comida para llevar para que la entreguen en el dormitorio. En este escenario, la persona que entrega la comida para llevar es el agente.

Insertar descripción de la imagen aquí

Tanto las solicitudes como las respuestas deben pasar a través del proxy. En este momento, es fácil obtener los detalles de la solicitud y la respuesta
en el proxy. Por lo tanto, la herramienta de captura de paquetes es un proxy y la herramienta de captura de paquetes puede obtenerlos fácilmente. durante el proceso de transmisión Datos detallados de la red


2. Herramienta de captura de paquetes Fiddler

Fiddler es una herramienta de captura de paquetes que se especializa en capturar HTTP. No puede capturar TCP/UDP/IP... Para capturarlos, necesita usar una herramienta como Wireshark.

Insertar descripción de la imagen aquí

En el lado izquierdo de Fiddler , hay una lista que muestra todos los datagramas HTTP/HTTPS capturados actualmente . HTTPS es el hermano gemelo de HTTP. HTTPS simplemente introduce un mecanismo de cifrado basado en HTTP.

Cuando se selecciona un elemento de la lista de la izquierda y se hace doble clic, la información detallada del elemento se mostrará a la derecha.

preguntar:

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Las opciones en esta página de pestaña indican qué formato se usa actualmente para mostrar las solicitudes HTTPRaw . Esta es la opción que usamos más.
Seleccione y lo que Rawverá es el cuerpo de los datos de la solicitud HTTP
. Seleccione otras opciones, lo que equivale a que Fiddler procese el datos Algo de procesamiento, ajustó el formato

¡ ¡Haz clic y Rowsaldrán los datos originales!! ¡¡
Sin embargo, es demasiado pequeño para verlo claramente!! Puedes hacer clic al ladoview in Note

Insertar descripción de la imagen aquí

Lo anterior es la apariencia original de una solicitud HTTP.
Si construye datos en el socket TCP de acuerdo con el formato anterior y los escribe en el socket, es esencialmente equivalente a construir una solicitud HTTP.

respuesta:

Insertar descripción de la imagen aquí

Hay muchas opciones de respuesta, debes seleccionar aquí Rawpara ver la ontología .

Insertar descripción de la imagen aquí

¿El cuerpo principal que ves parece estar confuso ? Los caracteres confusos son en realidad el resultado de la compresión.
Para un servidor, el recurso de hardware más caro es en realidad el ancho de banda de la red . Las respuestas HTTP como estas suelen ser muy grandes y ocupan más ancho de banda. Para mejorar la eficiencia, el servidor a menudo devuelve datos "comprimidos", que luego el navegador descomprime después de recibirlos.

Insertar descripción de la imagen aquí

Haga clic en este botón para descomprimir:

Insertar descripción de la imagen aquí

Aviso:

1. Cuando se instala Fiddler por primera vez, HTTPS no está habilitado de forma predeterminada . Si detecta el paquete HTTPS, ocurrirá una situación similar.

Insertar descripción de la imagen aquí

La mayoría de los sitios web en Internet hoy en día son HTTPS . Si HTTPS no está activado, básicamente no hay nada que detectar.

Insertar descripción de la imagen aquí

2. Fiddler puede recordarle que instale el certificado xxx (una cadena en inglés...), ¡asegúrese de hacer clic en Sí!

3. Fiddler, como proxy, entra en conflicto con otros programas proxy.
Si también hay otros programas/complementos proxy instalados en su computadora, puede causar que Fiddler falle (no se puede detectar nada). Antes de usar Fiddler, primero debe salir programas relacionados

Pregunta de seguridad:

  • Verifique la aplicación correspondiente para ver si el nombre de usuario y la contraseña están encriptados. De lo contrario, puede obtener los
    datos de comunicación de la red en el host actual a través de la captura de paquetes.
    Además, esta captura de paquetes no necesariamente tiene que estar en su computadora, o en un nodo intermedio en el enlace de comunicación
  • Cómo resolver este problema requiere cifrado en la capa de aplicación

Insertar descripción de la imagen aquí

https:

De hecho, está encriptado y garantiza la seguridad, pero https es principalmente para evitar la manipulación , no para evitar el robo [propósito principal]


3. Formato de solicitud HTTP

Insertar descripción de la imagen aquí

La solicitud se divide en 4 partes:

  • La línea de solicitud (primera línea) contiene tres partes:

    • 1. Método HTTP . El método describe aproximadamente lo que esta solicitud quiere hacer. ``GET` significa obtener algo del servidor.
    • 2. URLDescriba dónde se encuentran los recursos de la red a los que se accederá.
    • 3. Número de versión , HTTP/1.1 significa que la versión HTTP utilizada actualmente es 1.1. 1.1 es la versión más común en este momento, y también puede ser 1.0/2/3.
  • Encabezado de solicitud (encabezado) , que contiene muchas líneas

    • Cada fila es un par clave-valor.
    • Utilice entre claves y valores para :空格separar
      pares clave-valor, un concepto muy, muy, muy importante en las computadoras
    • El número de pares clave-valor aquí no es fijo (puede ser más o menos), y diferentes claves y valores tienen diferentes significados (los significados de algunos pares clave-valor comunes se presentarán más adelante)
  • Línea vacía : equivalente a la etiqueta final del encabezado de la solicitud
    , similar a nulo en la lista vinculada

  • Cuerpo de la solicitud : opcional, no necesariamente incluido

Un pequeño truco para usar Fiddler:

  • La lista de la izquierda continuará capturando nuevos resultados , y la lista pronto será muy grande (muchos sitios web interactúan constantemente con el servidor, e incluso algunos otros programas en su computadora también se comunican en secreto con otros. El servidor usa interacción HTTP)
  • Muchas veces es necesario limpiar la pantalla , seleccionar un registro, luego ctrl + a para seleccionar todo y luego presionar eliminar para eliminar.

Un simple clic para iniciar sesión permitirá N múltiples interacciones entre el navegador y el servidor de la nube de código. Esto es normal.
Necesitamos encontrar la solicitud a la que queremos prestar atención y responder.

Insertar descripción de la imagen aquí


4. Formato de respuesta HTTP

Insertar descripción de la imagen aquí

  • Primera línea : contiene 3 partes.

    • 1. Número de versión HTTP/1.1

    • 2. El código de estado 200 describe si la respuesta es "exitosa" o "fallida", y diferentes códigos de estado describen el motivo del error.

    • 3. La descripción del código de estado OK utiliza un grupo de palabras simples para describir el significado del código de estado actual.

  • encabezado de respuesta

    • También es una estructura de par clave-valor, en la que cada par clave-valor ocupa una línea.
    • Úselo para separar cada clave y valor :空格,
    • El número de pares clave-valor en el encabezado de respuesta también es incierto. Diferentes pares clave-valor representan diferentes significados
  • Una línea en blanco
    representa la etiqueta final del encabezado de respuesta.

  • Cuerpo de respuesta (cuerpo)

    • Datos específicos devueltos por el servidor al cliente.
    • Las cosas aquí pueden venir en una variedad de formatos diferentes , ¡el más común de los cuales es html!

3. Solicitud HTTP (Solicitud)

1 、 URL

  • Lo que normalmente llamamos "sitio web" es en realidad URL ( Localizador Uniforme de Recursos )
  • Cada archivo en Internet tiene una URL única. Es necesario saber no sólo quién es el host, sino también qué recurso del host recuperar.

1.1 Formato básico de URL

Insertar descripción de la imagen aquí

1. Nombre del plan de acuerdo:

  • Describe para qué protocolo se utiliza la URL actual

  • http://para HTTP
    https://para HTTPS
    jdbc:mysql://para jdbc:mysql

2. Información de inicio de sesión:

  • Esta parte rara vez se usa ahora. En la antigüedad, al navegar por Internet, el nombre de usuario y la contraseña se reflejaban aquí.

3. Dirección del servidor

  • ¿Cuál es el host al que se accede actualmente ? Puede ser una dirección IP o un nombre de dominio.

4. Número de puerto del servidor

  • Indica a qué aplicación del host se está accediendo actualmente (el número de puerto se omite en la mayoría de los casos )
  • Cuando se omite, no significa que no haya ninguno, pero el navegador asignará automáticamente un valor predeterminado . Para las URL que comienzan con http, 80el puerto se usará como valor predeterminado. Para las URL que comienzan con https, 443el puerto se usará como el valor predeterminado.

5. Rutas de archivos jerárquicas

  • La ruta del archivo describe los recursos del servidor al que se accede actualmente.
  • Aunque una ruta de archivo esté escrita en la URL solicitada, no significa necesariamente que realmente exista un archivo correspondiente en el servidor . Este archivo puede ser un archivo real que existe en el disco, o puede ser virtual, datos dinámicos construidos por el código del servidor.

La dirección IP + puerto + ruta del archivo jerárquico anterior en realidad describe un recurso específico en la red, pero sobre esta base, también puede conllevar algunos otros requisitos, que son los siguientes parámetros.

6. Cadena de consulta

  • Básicamente, el navegador/cliente pasa información personalizada al servidor , lo que equivale a presentar requisitos adicionales para los recursos obtenidos.

  • El contenido de la cadena de consulta es esencialmente una estructura de par clave-valor , que está completamente definida por el propio programador y es desconocida para los externos. Por ejemplo: spm=1001.2014.3001.5502, clave: spm, valor: 1001.2014.3001.5502, varios pares clave-valor están separados por caracteres de dirección

  • Utilice ? para separar la cadena de consulta y la ruta

  • La ruta es /, la cadena de consulta (consulta agitada) no tiene https://www.sogou.com/

    La ruta web, la cadena de consulta se sigue hasta el final, https://www.sogou.com/web?query=fiddler&_asf=www.sogou.com&_ast=&w=01015002&p=40040108&ie=utf8&from=index-nologin&s_from=index&oq=&ri=0&sourceid=sugg&suguuid=&sut=0&sst0=1652343501136&lkt=0%2C0%2C0&sugsuv=1623569485720894&sugtime=1652343501136

    La ruta es qq_56884023/article/details/124481401 y la cadena de consulta va desde el final hasta https://blog.csdn.net/qq_56884023/article/details/124481401?spm=1001.2014.3001.5502

7. Identificador de fragmento

  • Describe a qué subsección específica de la página HTML actual se debe acceder y puede controlar el navegador para que se desplace a la posición relevante.

Partes omitibles de la URL:

  • Nombre del protocolo: se puede omitir. Si se omite, el valor predeterminado es http://
  • Dirección IP/nombre de dominio: se puede omitir en HTML (como img, enlace, script, src o atributo href de una etiqueta). Si se omite, significa que la dirección IP/nombre de dominio del servidor es consistente con la dirección IP /nombre de dominio del HTML actual.
  • Número de puerto: se puede omitir. Después de omitir, si es el protocolo http, el número de puerto se establece automáticamente en 80; si es el protocolo https, el número de puerto se establece automáticamente en 443.
  • Ruta de archivo jerárquica: se puede omitir. Cuando se omite, equivale a /. Algunos servidores accederán automáticamente a /index.html al descubrir la ruta /.
  • Cadena de consulta: se puede omitir
  • Identificador de fragmento: se puede omitir

Resumen de URL:

  • Para las URL, la estructura interna parece complicada, de hecho, las más importantes y las más estrechamente relacionadas con el desarrollo constan principalmente de cuatro partes.
    • dirección IP/nombre de dominio
    • Número de puerto (normalmente uno pequeño y transparente)
    • Camino jerárquico
    • cadena de consulta cadena de consulta (¡¡¡estos dos están estrechamente relacionados con la escritura de código !!!)

1.2、Codificación/decodificación de URL

  • Cuando la cadena de consulta contiene caracteres especiales , es necesario utilizar caracteres de escape.
  • Este proceso de escape se llama codificación de URL . Por el contrario, restaurar el contenido escapado se llama decodificación de URL.

Hay muchos símbolos con significados especiales en la URL /: ? &=... Estos símbolos tienen significados específicos en la URL
. Si la cadena de consulta también contiene dichos símbolos especiales, ¡puede provocar que la URL no se pueda analizar!

Cuando buscamos C ++ en sogou, podemos ver que hay un par clave-valor en la cadena de consulta en la URL, que representa el contenido de la palabra de consulta.

https://www.sogou.com/web?query=C%2B%2B&_ast=1652345880&_asf=www.sogou.c …

%2BDe hecho, es +el resultado obtenido después de escapar mediante la codificación de URL. +La representación hexadecimal ASCII del carácter es exactamente 2B (B es el símbolo hexadecimal, equivalente a 11 en decimal)

Durante el desarrollo real, especialmente cuando se interactúa con el front-end y el back-end, especialmente cuando es necesario transmitir alguna información al servidor a través de la URL, la codificación de la URL se debe realizar en los símbolos especiales internos. No sólo la puntuación, sino también los caracteres chinos
que pueden causar problemas si no se escapan

  • Un carácter chino se compone de un método de codificación como UTF-8 o GBK. Aunque no tiene un significado especial en la URL, aún debe escaparse. De lo contrario, el navegador puede considerar un determinado byte en UTF-8/GBK. codificación como un carácter en la URL símbolos especiales
  • Las reglas de escape son las siguientes: convierta los caracteres que deben transcodificarse a hexadecimal , luego , de derecha a izquierda, tome 4 dígitos (se procesan menos de 4 dígitos directamente), haga un dígito por cada 2 dígitos, agregue% al frente, y codificarlo como formato % XY, cada byte se procesa por separado

Por ejemplo, la etiqueta a de Sogou tiene un atributo href que contiene la consulta del usuario. Si la consulta china no está codificada en URL en la página, el usuario no podrá saltar correctamente después de hacer clic en algunos navegadores.

Insertar descripción de la imagen aquí


2. Método

Aquí solo se enumera 1.1, y las 2 3 versiones siguientes no se considerarán por el momento.

Insertar descripción de la imagen aquí

¡¡¡Existen muchos métodos de protocolo HTTP!!!,
pero los más utilizados son GETy POST. GET ocupará ocho depósitos exclusivamente, POST ocupará un depósito y los métodos restantes compartirán este depósito.

  • PUT es similar a POST, pero tiene propiedades idempotentes y generalmente se usa para actualizaciones.
  • DELETE elimina el recurso especificado por el servidor.
  • OPCIONES devuelve los métodos de solicitud admitidos por el servidor
  • HEAD es similar a GET, excepto que no se devuelve el cuerpo de la respuesta, solo se devuelven los encabezados de la respuesta.
  • TRACE hace eco de la solicitud recibida por el servidor y se utilizará durante las pruebas.
  • CONNECT Reservado, aún no utilizado
  • (Tenga en cuenta que esto es lo esperado)

2.1 Semántica

La intención original de introducir estos métodos en HTTP es expresar diferentes "semánticas" Semántica: si existe un significado específico.

Por ejemplo, HTML: h3, p, a, img... etiquetas semánticas, div span sin etiquetas semánticas

El ideal es completo, pero la realidad es muy delgada.
Los grandes que diseñaron HTTP esperan que los programadores puedan usar los diversos métodos aquí de acuerdo con la semántica HTTP.
Pero a medida que pasa el tiempo, el uso ha perdido forma. Ahora todos escriben código. Básicamente, GET / POST es un transbordador y básicamente no se tiene en cuenta la semántica
. Debido a esto, los límites entre varios métodos HTTP se han vuelto borrosos.

GET también puede enviar algo al servidor y POST también puede obtener algo del servidor.


2.2 Pregunta de entrevista clásica: hable sobre la diferencia entre GET y POST

¡La primera oración es cerrar el trato primero! ¡¡¡No existe una diferencia esencial entre OBTENER y POST!!!
Específicamente, es equivalente al escenario donde se puede usar GET y también se puede reemplazar por POST. El escenario donde se puede usar POST también se puede reemplazar por GET. Sin embargo, todavía existen algunas diferencias en los detalles.

  1. La diferencia semántica es
    que GET generalmente se usa para recuperar datos y POST generalmente se usa para cargar datos. La situación actual es que GET también se usa a menudo para cargar datos y POST también se usa a menudo para obtener datos.

  2. Normalmente , GET no tiene un cuerpo y GET transmite datos al servidor a través de una cadena de consulta.
    Normalmente , POST tiene un cuerpo y POST transmite datos al servidor a través de un cuerpo, pero POST no tiene una cadena de consulta.

    • Si solo quiero que GET tenga un cuerpo (construir una solicitud GET con cuerpo yo mismo), o quiero que POST tenga una cadena de consulta, no es una diferencia
      obligatoria en absoluto, es solo un uso común. Puedes seguir el hábito o romperlo Hábito. Al igual que algunas empresas, Uniform utiliza POST para gestionar todas las solicitudes.
  3. Las solicitudes GET generalmente son idempotentes y las solicitudes POST generalmente no son idempotentes (no es un requisito, sino una recomendación ) .

    • Idempotente : es un término matemático, cada vez que das la misma entrada, el resultado de salida que obtienes es seguro. No idempotente : cada vez que das la misma entrada, el resultado que obtienes es incierto
  4. GET se puede almacenar en caché , POST no se puede almacenar en caché

    • Recuerda el resultado con antelación, si es idempotente es muy útil recordar el resultado, ahorrando el coste del siguiente acceso. Si no es idempotente, no debe recordar que
      si se puede almacenar en caché está relacionado con si puede ser idempotente. Si la solicitud en sí no es idempotente, no se puede almacenar en caché.

Insertar descripción de la imagen aquí

Por ejemplo, aunque los datos publicitarios obtenidos también se obtienen a través de GET, ¡ no deben almacenarse en caché! Deben calcularse en tiempo real para garantizar que los usuarios correctos entreguen los anuncios correctos, y los anuncios deben cumplir con las reglas de ubicación del anunciante.

Nota : Los errores más típicos en Internet:

  • Hay un límite superior en la longitud de los datos pasados ​​por la solicitud GET (hay un límite superior en la URL), ¡pero no hay un límite superior en el
    error POST! En el documento estándar HTTP, se establece claramente que el El estándar en sí no limita la longitud de la URL (la razón por la que esta declaración circula en Internet es que la navegación en la antigüedad La implementación del navegador no cumple completamente con el estándar... no es adecuado para los navegadores modernos...)

3. Solicitar "encabezado"

  • Hay algunos pares clave-valor en el encabezado y diferentes pares clave-valor representan diferentes significados.
  • Actualmente existen muchos tipos de pares clave-valor aquí, aquí se muestran algunos simples y comunes:

3.1 、 Anfitrión

Indica la dirección y el puerto del host del servidor.

Anfitrión: www.sogou.com. Los nombres de dominio se pueden convertir en direcciones IP a través de DNS


3.2、Longitud del contenido、Tipo de contenido

  • Content-LengthRepresenta la longitud de los datos en el cuerpo.
  • Content-TypeRepresenta el formato de datos en el cuerpo de la solicitud.

Estos dos atributos describen el cuerpo. Si no hay cuerpo (GET) en su solicitud, ¡estos dos campos no son necesarios!
Generalmente, POST tiene un cuerpo y el inicio de sesión generalmente se implementa en función de POST.

Insertar descripción de la imagen aquí

¿Por qué iniciar sesión mediante POST? ¿Puedo usar GET para lograr la función de inicio de sesión? ¡¡Es completamente posible usar GET para lograr la función de inicio de sesión!!

¿Por qué todavía usa principalmente POST?
Al iniciar sesión, debe pasar el nombre de usuario y la contraseña al servidor . Si es GET , el nombre de usuario y la contraseña generalmente se pasan en la cadena de consulta de la URL.
En este momento , la ruta en la barra de direcciones del navegador, puede convertirse en una cadena muy larga)
(En este momento, la experiencia del usuario puede no ser muy buena)

Especialmente en los primeros días, muchos sitios web enviaban contraseñas en texto claro.
Si la contraseña apareciera en texto claro en la URL, en realidad se vería muy mal.

Los datos POST están en el cuerpo y el usuario no puede verlos directamente . Cualquier cosa que coloque en el cuerpo tendrá muy poco impacto en el usuario.

Hay un dicho en Internet: use POST para iniciar sesión porque POST es más seguro que GET. Esta afirmación es completamente incorrecta. No es seguro y depende de si sus datos se transmiten en texto claro y si están encriptados.

Opciones comunes:

  1. application/x-www-form-urlencoded: El formato de datos enviado por el formulario, en este momento el formato del cuerpo es el siguiente:

    • título=prueba&contenido=hola
  2. multipart/form-data: El formato de datos enviado por el formulario (agregado en la etiqueta del formulario
    enctyped="multipart/form-data"generalmente se usa para enviar imágenes/archivos. El formato del cuerpo es el siguiente:

    • Tipo de contenido: multipart/form-data; límite=----
      WebKitFormBoundaryrGKCBY7qhFd3TrwA

      ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
      Disposición de contenido: datos de formulario; nombre = “texto”

      título
      ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
      Disposición de contenido: datos de formulario; nombre=“archivo”; nombre de archivo = “chrome.png”
      Tipo de contenido: imagen/png

      PNG… contenido de chrome.png…
      ------WebKitFormBoundaryrGKCBY7qhFd3Trw

  3. application/json: Los datos están en formato json, el formato del cuerpo es el siguiente

    • {“nombre de usuario”:“123456789”,“contraseña”:“xxxx”,“código”:“jw7l”,“uuid”:“d110a05ccde64b16a861fa2bddfdcd15”}
    • El formato del cuerpo en la tercera solicitud más común json(1. Protocolo de capa de aplicación personalizado, objeto 2.js)

Información adicional sobre la longitud del contenido:

HTTP también es un protocolo basado en TCP.
TCP es un protocolo orientado al flujo de bytes . El problema de los paquetes fijos => ¡Diseñe razonablemente el protocolo de la capa de aplicación para aclarar los límites entre paquetes!

Ambos se reflejan en HTTP:

  1. Usar delimitadores
    • Si actualmente hay varias solicitudes GET en el búfer de recepción TCP...
      Cuando la aplicación lee las solicitudes, utiliza una línea como delimitador.
  2. Usar longitud
    • Si actualmente hay varias solicitudes POST y se alcanza el búfer TCP, en
      este momento hay un cuerpo después de la línea en blanco. Después de que la aplicación lee la línea en blanco, debe continuar leyendo varias longitudes de datos de acuerdo con la longitud indicada por Largancia de contenido.

3.3 Usuario-Agente (UA para abreviar)

Significa qué tipo de cosa está utilizando el usuario actual para navegar por Internet.

Insertar descripción de la imagen aquí

Principalmente información del sistema operativo + información del navegador.

En la antigüedad, los navegadores estaban en un estado de rápido progreso. Al principio, los navegadores solo podían mostrar texto,
luego pudieron mostrar imágenes
, luego pudieron mostrar varios estilos complejos y luego pudieron cargar js. para lograr la interacción. Posteriormente
, fue capaz de soportar varios multimedia (reproducción de vídeos, etc.).

En el pasado, debido al rápido desarrollo de los navegadores, el mercado estaba muy fragmentado.

Algunos usuarios usan navegadores más antiguos (que solo pueden mostrar texto)
; algunos usuarios usan navegadores relativamente nuevos (pueden admitir js)

Esta vez trajo desafíos para los desarrolladores de sitios web
. Para resolver este problema, a los programadores inteligentes se les ocurrió la idea de permitir que el navegador envíe un
servidor de inicio autoinformado en la solicitud. El servidor puede luego usar la dirección de casa autoinformada en la información del navegador, puedes hacer una distinción

Hoy en 2022, las funciones de los navegadores convencionales tienen muy poca diferencia (hace diez años, la compatibilidad del navegador todavía era un gran problema a considerar en el desarrollo front-end), y el papel del campo UA ya no es tan importante
. Con la llegada de la Internet móvil actual, UA ahora tiene una nueva misión: ¡¡¡la mayor diferencia entre PC y móvil es el tamaño y la proporción de la pantalla!!! El tamaño de la pantalla es mucho más pequeño que el de la PC (generalmente el teléfono móvil). páginas web, es necesario diseñar botones y cosas similares más grandes). La proporción de pantalla es que todas las PC son de pantalla ancha y todos los teléfonos móviles son de pantalla estrecha. Diferentes proporciones conducen a diferentes diseños de página. Por lo tanto, el servidor puede distinguir si es un teléfono móvil o un teléfono móvil basado en UA . Computadora. Si es un teléfono móvil, volverá a la versión móvil de la página web. Si es una computadora, volverá a la versión para computadora de la web. página.


La razón por la que User-Agent se ve así se debe a problemas históricos. Puede consultar
la historia de User-Agent: http://www.noyamagic.net/librarys/veda/detail/2576


3.4、Consultar

  • Indica la página actual y desde qué página salta.
  • El referente no está necesariamente presente . Si ingresa la dirección directamente a través de la barra de direcciones del navegador o hace clic directamente en favoritos, no hay ningún referente en este momento.

Consulte: https://gitee.com/login

Referer también es un campo muy útil en el sistema de publicidad, ¡¡que cobra por clic!!

Insertar descripción de la imagen aquí

¡¡Siempre que el usuario haga clic en los resultados de la búsqueda, este clic activará la facturación!! (¡¡Los anunciantes tienen que pagar a Sogou!!) Publicidad CPC (pago por clic)

Dado que la facturación se basa en clics, ¿cuántas veces se ha hecho clic en este anuncio en un día/mes? ¡¡¡Debe haber una estadística clara!!!

La relación insumo-producto del ROI, esta estadística, ¿es la estadística de Sogou o la estadística del anunciante? De hecho, son ambas estadísticas.

Estadísticas de Sogou : cada solicitud de clic accederá primero al servidor de Sogou y luego saltará a la página del anunciante.

Insertar descripción de la imagen aquí

Con un clic, la solicitud se envía al servidor de facturas de Sogou y Sogou puede realizar estadísticas basadas en los datos recibidos en este servidor.

Estadísticas del anunciante : algunos registros también se pueden registrar en el sitio web del anunciante.

Un anunciante puede anunciar en múltiples plataformas y
puede utilizar Referer para distinguir de qué plataforma publicitaria importó el tráfico la solicitud actual.

Insertar descripción de la imagen aquí

¿Es posible que exista una operación para alterar el Referer en la solicitud HTTP? Originalmente era Sogou, pero se cambió a otra cosa.
Esta posibilidad es completamente posible, ¡y estuvo muy extendida en un momento!
¿Quién tiene la capacidad para hacer esto? ¿Quién tiene la motivación para hacerlo? => Operador

Los operadores también cuentan con sus propias plataformas publicitarias.

La infraestructura de red (enrutadores y conmutadores) la proporcionan los operadores. El tráfico de red pasa a través de sus equipos, y sus equipos pueden capturar su solicitud y modificarla.

Esta situación era muy común antes de 2015. En este caso, la demanda debe combatirse, pero también debe contrarrestarse por medios técnicos: HTTPS
Antes de 2015, todas las plataformas publicitarias como Baidu y Sogou usaban el protocolo HTTP (había muy pocos HTTPS en Internet en ese momento), por lo que estos Las principales empresas de Internet han comenzado a actualizarse a HTTPS.


3.5、Cookie

Los navegadores, por razones de seguridad, no permiten que el js de la página acceda al sistema de archivos en la computadora del usuario de forma predeterminada.
Supongamos que una página web contiene código malicioso. Si no tiene cuidado, este código malicioso puede activarse y destruir los archivos en su computadora. ¡¡¡Algunos archivos han sido eliminados!!!

Sin embargo, estas restricciones de seguridad también traen algunos problemas: a veces, es realmente necesario almacenar algunos datos de forma persistente en la página para facilitar el acceso posterior al sitio web.

Entre ellos, el más típico es almacenar la información de identidad actual del usuario.
Después de que el usuario completa la autenticación de identidad en la página de inicio de sesión, el servidor devolverá la información de identidad del usuario al navegador y el navegador guardará esta información en un lugar específico. ubicación, cuando visite posteriormente otras páginas del mismo sitio web, el navegador traerá automáticamente esta información de identidad y el servidor podrá identificarla.

Por lo tanto, ¡esta es la estrategia actual!
Aunque no puedes permitir que el js de la página acceda a todos los datos de tu disco, puedes asignar una pequeña habitación negra al navegador por separado , y el código js se puede tirar en esta pequeña habitación negra. Aquí está: Si pierde el tiempo, no afectará otros materiales de aprendizaje en su disco.

Las pequeñas habitaciones oscuras aquí tienen muchas formas diferentes.
Entre ellos Cookiese encuentra una forma más antigua y clásica. Los navegadores modernos también admiten otras soluciones de almacenamiento local.

Cookie es un mecanismo proporcionado por el navegador a la página para almacenar datos de forma persistente . La persistencia significa que los datos no se perderán (escribirán en el disco) debido al reinicio del programa o del host.

La forma organizativa específica de las cookies:

  1. Primero organícelo por nombre de dominio y asigne una pequeña sala a cada nombre de dominio . Cuando visito Sogou, el navegador registrará un conjunto de cookies para el nombre de dominio sogou. Cuando visito Code Cloud, el navegador también registrará un conjunto de cookies para Code Cloud.
  2. En una sala pequeña, los datos se organizarán según pares clave-valor .

Insertar descripción de la imagen aquí

De dónde provienen los datos de las cookies: en realidad, el servidor los devuelve al cliente.

Contiene un conjunto de dichos encabezados , es decir, después de que el servidor completa la autenticación de identidad, devuelve cierta información específica al cliente , que está representada por Set-Cookiedicho encabezado de respuesta.

Insertar descripción de la imagen aquí

Las cookies almacenan información de identidad, que es como ir al hospital a ver a un médico.

  • Cuando vayas al hospital lo primero que debes hacer es registrarte
    en la oficina de registro, además de pagar dinero también te entregarán una tarjeta médica, al entregarte la tarjeta médica el personal te pedirá tu información específica (Nombre, DNI, teléfono…)

  • En el proceso de tratamiento médico posterior, esta tarjeta médica jugó un papel vital. Llegué
    por primera vez a la clínica pediátrica. Antes de ver a un médico, el médico tenía que pasar mi tarjeta médica. Pasar la tarjeta era para obtener mi información de identidad. información de identidad Además de la información básica, también hay casos pasados

  • Después de algunos diagnósticos, el médico me dio algunas órdenes:
    ir al laboratorio, hacerme análisis de sangre y hacerme un análisis de sangre de rutina. Todavía tomé mi tarjeta médica y la pasé, y con este pase obtuve mi información básica y el contenido específico de la prueba que el médico me acababa de recetar para ir al departamento de radiología.

    Organizar una radiografía. También tomo mi tarjeta médica y la paso, y sé qué tipo de película quiero tomar...

  • Durante el proceso anterior, ¡¡¡la tarjeta médica que tengo en la mano es una cookie!!!
    Aunque parte de la información se puede almacenar en la tarjeta médica, la cantidad de datos guardados es limitada.
    No es esta tarjeta la que realmente guarda mi información, pero es colocado en el hospital, en el servidor y en la tarjeta, solo necesito almacenar una de mis identidades (guardar una identificación de usuario)

Esta información clave se almacena en el servidor y se llama "sesión".

El servidor gestiona muchas sesiones,
en cada sesión se almacena la información clave del usuario (información básica, exploraciones a realizar, casos pasados...), y cada sesión también tiene una sessionld(identificación de sesión).

Lo que realmente se almacena en la tarjeta médica es el ID de esta sesión.

Insertar descripción de la imagen aquí

Esto se parece mucho a un sessionld
servidor. Puede encontrar la sesión correspondiente al usuario en función de estos datos y obtener más detalles del usuario. Los pares clave-valor
almacenados en la cookie aquí también son similares a la cadena de consulta y son también programado por programadores Definición, los forasteros no lo saben ni pueden entenderlo

Resumir:

  • Una cookie es un mecanismo proporcionado por el navegador para almacenar datos de forma persistente.
  • El escenario de aplicación más importante de Cookie es almacenar el ID de sesión, de modo que al acceder a páginas posteriores del servidor, se pueda traer este ID, para que el servidor pueda conocer la información del usuario actual (el mecanismo para guardar la información del usuario en el servidor). es convocado a sesión)
  • ¿Se pueden utilizar cookies para almacenar otra información? ¡¡¡Por supuesto que es posible!!! Puedes guardar lo que quieras guardar, todo está personalizado por programadores!!!

Comprensión de la sesión: la lista de mensajes de QQ es equivalente a la "lista de sesiones", y los registros de chat aquí son equivalentes a la información detallada del usuario.


4. Cuerpo del texto

El formato del contenido en el texto es muy flexible, dependiendo del tipo de contenido en el encabezado.
Puedes observar estas situaciones capturando paquetes:

  1. application/x-www-form-urlencodedAl igual que la cadena de consulta, tiene una estructura de pares clave-valor, que utiliza separación entre pares clave-valor &y separación entre claves y valores =, y debe serurl encode

    • Captura la solicitud de avatar para cargar la nube de código

      avatar=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAPgAAAD4CAYAAADB0Ss
      LAAAg…

  2. multipart/form-datasubir archivos

    • Capturar la función “subir currículum” del sistema de administración educativa

      ------WebKitFormBoundary8d5Rp4eJgrUSS3wT

      Disposición de contenido: datos de formulario; nombre="archivo"; nombre de archivo="Li Xingya Java Development Engineer.pdf"
      Tipo de contenido: aplicación/pdf

      %PDF-1.7

      1 0 obj
      <</Nombres <</Dests 4 0 R>> /Contornos 5 0 R /Páginas 2 0 R /Tipo /Catálogo>>
      endobj
      3 0 obj
      <</Autor ( N ​​v~ N•) /Comentarios () /Empresa () /FechaCreación
      (D:20201122145133+06'51') /Creador ( WPS e [W) /Palabras clave () /ModDate (
      D:20201122145133+06'51') /Productor ( ) /FuenteModificada (D:20201122145133+06'51')
      /Asunto () /Título () /Atrapado /False>>
      endobj
      13 0 obj
      <</AIS false /BM /Normal /CA 1 /Tipo /ExtGState /ca 1 >>
      endobj

  3. application/json{}Los pares clave-valor compuestos por right , use comas para separar los pares clave-valor y use: para separar claves y valores.

    • Capturar la página de inicio de sesión del sistema de administración educativa.

      {“nombre de usuario”:“123456789”,“contraseña”:“xxxx”,“código”:“u58u”,“uuid”:“9bd8e09ea27b48cdacc6a6bc41d9f462”}

La captura de paquetes es una habilidad muy útil.

  • Entendiendo HTTP
  • Depurar un programa web
  • Implementar un rastreador
    • Escriba un cliente HTTP usted mismo para simular operaciones humanas y obtener automáticamente parte del contenido del sitio web.
      Cualquier lenguaje de programación puede escribir un rastreador siempre que pueda operar la red. Usar Java para escribir un rastreador también es una operación muy común.
    • Cada sitio web proporcionará un archivo como robot.txt. Este archivo le indica qué recursos se pueden rastrear legalmente. En teoría, siempre que rastree contenido que no esté incluido en la lista blanca proporcionada por el sitio web, se considerará comportamiento ilegal.

4. Respuesta HTTP

1. Código de estado

Indica si la solicitud fue exitosa o fallida y el motivo del error.

Hay muchos códigos de estado proporcionados por HTTP:

200 OK es el código de estado más común, que indica que el acceso se realizó correctamente.

404 No encontrado El recurso al que se accede no existe

sogou.com/1.html:

Insertar descripción de la imagen aquí

bilibili/1.html:

Insertar descripción de la imagen aquí

403 Prohibido Aunque el recurso está disponible, no tienes permiso para usarlo (feo rechazo)

HTTP/1.1 403 Prohibido

Esta situación es difícil de encontrar cuando vas a un sitio web externo para capturar paquetes... Pero si escribes el backend del sitio web más tarde, esto sucederá fácilmente. Por ejemplo,
intenta usar GET para acceder a los servidores de otras personas, pero es posible que solo soporte POST, por lo que devolverá 405

500 Error interno del servidor Hay un problema con el servidor en sí, lo que significa un error, la probabilidad de ver esta situación en servidores externos es relativamente baja, pero es fácil que esto ocurra si escribimos el código nosotros mismos más tarde.

504 Tiempo de espera de puerta de enlace El servidor está demasiado ocupado

302 Mover redireccionamiento temporal

Durante el proceso de inicio de sesión, una situación muy típica

Esta palabra está involucrada en muchos escenarios informáticos, no solo HTTP.
Aunque existen diferencias en los detalles en diferentes escenarios, el significado principal es transferencia de llamadas.
Transferencia de llamadas: China Mobile, una que los operadores pueden manejar aquí. Para negocios, si alguien llama a mi número anterior, se transferirá automáticamente a mi nuevo número.

HTTP/1.1 302 Ubicación encontrada
: https://gitee.com/xxxxxxxxx/kodi-source
¡¡La ubicación describe dónde saltar a continuación!!
En la respuesta de redireccionamiento, el atributo Ubicación generalmente es requerido

Tipos de códigos de estado HTTP:

Insertar descripción de la imagen aquí

2 Al principio todo es un éxito - 200

A partir de 3 , todas son redirecciones: 301 302

4 comienza con un error en el lado del cliente——404 403

5 comienza con un error en el servidor - 500 504

Los códigos de estado que comienzan con 1 y 6 son muy raros y raros.

Entre estos códigos de estado, en realidad hay uno especial, 418
418. Aunque no está disponible en la Enciclopedia Sogou, existe en el documento estándar HTTP.
La descripción: Soy una tetera Soy una tetera Es
un huevo de Pascua ( humor del programador)

Sin embargo, en el desarrollo real, tenga cuidado con los huevos de Pascua. Un caso negativo típico:
hay un componente de código abierto de diseño de hormigas (fabricado por Alibaba) en el campo front-end. Esto todavía era muy popular antes y mucha gente lo estaba usando. . Entonces el
autor creó un huevo de Pascua. Este huevo de Pascua se activará
el día de Navidad. Si usa el componente publicitario, aparecerá una "pequeña nube". Un logotipo tan pequeño. El
cliente dijo por qué este botón estaba medio masticado. por un perro.


Supongo que te gusta

Origin blog.csdn.net/qq_56884023/article/details/125008066
Recomendado
Clasificación