Un artículo para comprender el mecanismo de caché http

mensaje HTTP

El mecanismo de caché del navegador es lo que llamamos mecanismo de caché HTTP, que se basa en el identificador de caché del mensaje HTTP. Primero comprenda el mensaje HTTP:

mensaje de solicitud

Formato del mensaje: línea de solicitud – encabezado de solicitud (encabezado de información general, encabezado de solicitud, encabezado de entidad) – cuerpo de solicitud (solo POST tiene un cuerpo de solicitud)

mensaje de respuesta

Formato del mensaje: Línea de estado – Encabezado de respuesta (Encabezado de información general, Encabezado de respuesta, Encabezado de entidad) – Cuerpo de respuesta
inserte la descripción de la imagen aquí

El encabezado de información general se refiere a los campos de encabezado admitidos por los paquetes de solicitud y respuesta: Control de caché, Conexión, Fecha, Pragma, Codificación de transferencia, Actualización, Vía, respectivamente;

El encabezado de la entidad es el campo de encabezado de la entidad de la información de la entidad, que son Permitir, Base de contenido, Codificación de contenido, Idioma de contenido, Longitud de contenido, Ubicación de contenido, MD5 de contenido, Rango de contenido, Tipo de contenido, Etag, Expires , Last-Modified, extension-header.

análisis de caché

La forma en que el navegador se comunica con el servidor es el modo de respuesta, es decir: el navegador inicia una solicitud HTTP; el servidor responde a la solicitud. Luego, después de que el navegador inicie la solicitud al servidor por primera vez y obtenga el resultado de la solicitud, decidirá si almacenar en caché el resultado de acuerdo con el identificador de caché del encabezado HTTP en el mensaje de respuesta y, de ser así, almacenar la solicitud. resultado y el identificador de caché en el caché del navegador.

inserte la descripción de la imagen aquí
La clave del mecanismo de almacenamiento en caché del navegador es:
1. Cada vez que el navegador inicia una solicitud, primero buscará el resultado de la solicitud y el ID de caché en el caché del navegador
2. Cada vez que el navegador obtiene el resultado de la solicitud devuelta, combinará el resultado con el caché El logotipo se almacena en el caché del navegador
Los dos puntos anteriores aseguran que el caché se almacene y lea para cada solicitud.

proceso de almacenamiento en caché

El proceso de almacenamiento en caché se divide en dos partes según sea necesario reiniciar una solicitud HTTP al servidor: almacenamiento en caché obligatorio y almacenamiento en caché de negociación .

1. Almacenamiento en caché obligatorio

El resultado de la caché y la ID de la caché no existen:

inserte la descripción de la imagen aquí
El resultado de la memoria caché y el ID de la memoria caché existen, pero el resultado ha caducado y se fuerza que la memoria caché no sea válida: el
inserte la descripción de la imagen aquí
resultado de la memoria caché y el ID de la memoria caché existen, y el resultado aún no ha caducado, y se fuerza que la memoria caché entre en vigor:
inserte la descripción de la imagen aquí

La regla de almacenamiento en caché del almacenamiento en caché obligatorio es: cuando el navegador envía una solicitud al servidor, el servidor colocará la regla de almacenamiento en caché en el encabezado HTTP del mensaje de respuesta HTTP y lo devolverá al navegador junto con el resultado de la solicitud. el almacenamiento en caché obligatorio es Expires And Cache-Control, donde Cache-Control tiene una prioridad más alta que Expires.

Caduca

Expires es un campo para HTTP/1.0 para controlar el almacenamiento en caché de la página web. Su valor es el tiempo de vencimiento del caché de resultados devuelto por el servidor. Es decir, cuando se envía la solicitud nuevamente, si el tiempo del cliente es menor que el valor de Expires , el resultado almacenado en caché se utilizará directamente.

Expires es un campo de HTTP/1.0, pero ahora el navegador usa HTTP/1.1 por defecto. Por HTTP/1.1, Expires ha sido reemplazado por Cache-Control. La razón es que el principio de Expires para controlar el caché es usar el tiempo del cliente y el regreso del servidor.Si el tiempo del cliente y el servidor es diferente debido a alguna razón, el caché forzado se invalidará directamente.

Control de caché

En HTTP/1.1, Cache-Control es la regla más importante, que se utiliza principalmente para controlar el almacenamiento en caché de páginas web. Los valores principales son:

  1. público: todo el contenido se almacenará en caché (tanto el cliente como el servidor proxy se pueden almacenar en caché)
  2. privado : todo el contenido solo puede ser almacenado en caché por el cliente, el valor predeterminado de Cache-Control
  3. sin caché: el cliente almacena en caché el contenido, pero se debe verificar si usar el caché negociando el caché
  4. no-store: todo el contenido no se almacenará en caché, es decir, no se utilizará el almacenamiento en caché obligatorio ni el almacenamiento en caché de negociación
  5. max-age=xxx: el contenido en caché caducará después de xxx segundos
  6. s-maxage: el tiempo de caducidad del recurso del servidor proxy
  7. inmutable: incluso si caduca, no hay necesidad de negociar y el recurso permanecerá sin cambios
  8. max-stale=xxx: los recursos se pueden usar dentro de xxx segundos después de la expiración
  9. stale-while-revalidate: durante la validación (negociación), devolver recursos obsoletos
  10. stale-if-error: Si hay un error en la verificación (negociación), devolver el recurso caducado
  11. must-revalidate: No se permite utilizar recursos vencidos luego de su vencimiento, debiendo esperar a que finalice la negociación
2. Caché de negociación

La negociación del almacenamiento en caché es el proceso en el que el navegador envía una solicitud al servidor con el identificador de caché después de que se obliga a caducar el caché, y el servidor decide si usar el caché de acuerdo con el identificador de caché.

La caché de negociación entra en vigor, devuelve 304:
inserte la descripción de la imagen aquí
la caché de negociación falló, devuelve 200 y solicita el resultado:
inserte la descripción de la imagen aquí
de manera similar, el identificador de la caché de negociación se devuelve al navegador junto con el resultado de la solicitud en el encabezado HTTP del mensaje de respuesta y los campos que controlan el caché de negociación son: Last-Modified/If-Modified-Since y Etag/If-None-Match, donde Etag/If-None-Match tiene una prioridad más alta que Last-Modified/If-Modified-Since.

Última modificación / Si se modificó desde

Última modificación es la hora en que el archivo de recursos se modificó por última vez en el servidor cuando el servidor responde a la solicitud;

If-Modified-Since significa que cuando el cliente inicia la solicitud nuevamente, lleva el valor de Última modificación devuelto por la solicitud anterior y usa este valor de campo para indicarle al servidor la hora de la última modificación del recurso devuelto por la última solicitud. Cuando el servidor recibe la solicitud y descubre que el encabezado de la solicitud contiene el campo If-Modified-Since, comparará el valor del campo If-Modified-Since con la hora de la última modificación del recurso en el servidor. el tiempo del recurso en el servidor es mayor que Si se establece el valor del campo If-Modified-Since, el recurso se devolverá con un código de estado de 200; de lo contrario, se devolverá 304, lo que indica que el recurso no se ha actualizado y el archivo de caché se puede seguir utilizando.

Etag / Si no hay coincidencia

Etag es un identificador único (generado por el servidor) que devuelve el archivo de recursos actual cuando el servidor responde a la solicitud;

If-None-Match significa que cuando el cliente inicia la solicitud nuevamente, lleva el valor Etag del identificador único devuelto por la solicitud anterior y usa este valor de campo para decirle al servidor el valor del identificador único devuelto por la última solicitud del recurso. Después de que el servidor recibe la solicitud y encuentra que el encabezado de la solicitud contiene If-None-Match, comparará el valor de campo de If-None-Match con el valor de Etag del recurso en el servidor.Si coinciden, 304 será devuelto, lo que indica que el recurso no se ha actualizado. , continúe utilizando el archivo de caché; si no es coherente, vuelva al archivo de recursos y el código de estado es 200

método de almacenamiento en caché

El caché del navegador se puede dividir en: caché de memoria (del caché de memoria) y caché del disco duro (del caché de disco) según la ubicación del recurso de caché. El orden en que el navegador lee
el caché es memoria -> disco
; sitio web –> 200 –> cerrar la pestaña Blog –> reabrir el sitio –> 200 (desde la memoria caché del disco) –> actualizar –> 200 (desde la memoria caché)

  • Caché de memoria (del caché de memoria): el caché de memoria tiene dos características, a saber, lectura rápida y puntualidad:
  1. Lectura rápida: la caché de memoria almacenará los archivos compilados y analizados directamente en la memoria del proceso, ocupando una cierta cantidad de recursos de memoria del proceso, para facilitar la lectura rápida durante la próxima ejecución.
  2. Oportunidad: Una vez cerrado el proceso, se borrará la memoria del proceso.
  • Caché del disco duro (desde la caché del disco): La caché del disco duro consiste en escribir directamente la caché en el archivo del disco duro. La lectura de la caché debe realizar operaciones de E/S en el archivo del disco duro almacenado en la caché y luego volver a analizar el contenido de caché.La lectura es complicada y la velocidad es alta.Más lenta que la memoria caché.

En el navegador, el navegador almacenará directamente archivos como js e imágenes en la memoria caché después de analizarlos y ejecutarlos, por lo que cuando se actualiza la página, solo necesita leer directamente desde la memoria caché (desde la memoria caché); mientras que el css se almacenará en el archivo del disco duro, por lo que cada vez que se procesa la página, el caché debe leerse desde el disco duro (desde el caché del disco).

Resumir

El almacenamiento en caché obligatorio tiene prioridad sobre el almacenamiento en caché de negociación. Si el almacenamiento en caché obligatorio (Expires y Cache-Control) tiene efecto, el caché se usará directamente. De lo contrario, se realizará el almacenamiento en caché de negociación (Last-Modified / If-Modified-Since y Etag / If -None-Match), el servidor determina si la caché de negociación debe usar la caché. Si la caché de negociación no es válida, significa que la caché de la solicitud no es válida, y el resultado de la solicitud se vuelve a obtener y luego se almacena en el caché del navegador; si es válido, devuelve 304 y continúa usando el caché.
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_43867717/article/details/124836276
Recomendado
Clasificación