Estoy usando el complemento "Velocidad de página" de Google para Firefox para acceder a mi sitio web.
Algunos de los componentes de mi página se indican como estado HTTP:
200 200 (caché) 304
Por "Velocidad de página" de Google.
Lo que me confunde es la diferencia entre 200 (caché) y 304.
He actualizado la página varias veces (pero no he borrado mi caché) y siempre parece que mi favicon.ico y algunas imágenes tienen el estado = 200 (caché), mientras que otras imágenes tienen el estado http 304.
No entiendo por qué la diferencia.
ACTUALIZACIÓN :
Al usar la "Velocidad de página" de Google, recibo un "200 (caché)" para http://example.com/favicon.ico , así como http://cdn.example.com/js/ga.js
Pero recibo un estado http "304" para http://cdn.example.com/js/combined.min.js
No entiendo por qué tengo dos archivos JavaScript ubicados en el mismo directorio / js /, uno que devuelve un estado http 304 y el otro que devuelve un código de estado 200 (caché).
max-age
yage
combinados también pueden dar como resultado 200 (caché) siage
es menor quemax-age
. La única excepción es cuando el usuario hace clic en el botón de actualización del navegador, en cuyo caso se envía un encabezado 304.href
,url,
ysrc
las referencias a cada archivo para incluir una 'huella digital' (ya sea un hash del archivo o un número incrementado simple) y, a continuación, indicar al servidor quitar esa huella digital y simplemente servirstyle.css
o lo que sea. Si no puede hacerlo en el servidor, haga que su sistema de compilación cambie el nombre de los archivos reales con la huella digital.200 (caché) significa que Firefox simplemente está utilizando la versión en caché local. Este es el más rápido porque no se realiza ninguna solicitud al servidor web.
304 significa que Firefox está enviando una solicitud condicional "If-Modified-Since" al servidor web. Si el archivo no se ha actualizado desde la fecha enviada por el navegador, el servidor web devuelve una respuesta 304 que esencialmente le dice a Firefox que use su versión en caché. No es tan rápido como 200 (caché) porque la solicitud aún se envía al servidor web, pero el servidor no tiene que enviar el contenido del archivo.
A su última pregunta, no sé por qué los dos archivos JavaScript en el mismo directorio están devolviendo resultados diferentes.
fuente
Esto también me arrojó por mucho tiempo. Lo primero que verificaría es que no está recargando la página haciendo clic en el botón Actualizar, que siempre emitirá una solicitud condicional de recursos y devolverá 304s para muchos de los elementos de la página. En su lugar, vaya a la barra de direcciones, seleccione la página y presione Intro como si acabara de escribir la misma URL nuevamente, eso le dará un mejor indicador de lo que se está almacenando en caché correctamente. Este artículo hace un gran trabajo al explicar la diferencia entre las solicitudes condicionales e incondicionales y cómo los afecta el botón de actualización: http://blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information-about- condicional-http-request-and-the-refresh-button.aspx
fuente
HTTP 304 no está "modificado". Su servidor web básicamente le dice al navegador "este archivo no ha cambiado desde la última vez que lo solicitó". Mientras que un HTTP 200 le dice al navegador "aquí hay una respuesta exitosa", que debe devolverse cuando sea la primera vez que su navegador accede al archivo o la primera vez que se accede a una copia modificada.
Para obtener más información sobre los códigos de estado, visite http://en.wikipedia.org/wiki/List_of_HTTP_status_codes .
fuente
Para su última pregunta, ¿por qué? Trataré de explicar con lo que sé
Una breve explicación de esos tres códigos de estado en términos simples.
Si el almacenamiento en caché está habilitado en el servidor
Para algunos archivos, el navegador decide solicitar del servidor y para algunos decide leer de los archivos almacenados (en caché). Por qué es esto ? Todos los archivos tienen una fecha de caducidad, así que
Si un archivo no caduca, el navegador lo usará desde la caché (200 caché).
Si el archivo ha caducado, el navegador solicita al servidor un archivo. Archivo de verificación del servidor en ambos lugares (navegador y servidor). Si se encuentra el mismo archivo, el servidor rechaza la solicitud. Según el protocolo, el navegador utiliza el archivo existente.
mira esta configuración nginx
Aquí la caducidad se establece en 60 segundos, por lo que todos los archivos estáticos se almacenan en caché durante 60 segundos. Entonces, si solicita un archivo nuevamente dentro de los 60 segundos, el navegador leerá de la memoria (200 de memoria). Si solicita después de 60 segundos, el navegador solicitará el servidor (304).
Supuse que el archivo no cambia después de 60 segundos, en ese caso obtendría 200 (es decir, el archivo actualizado se obtendrá del servidor).
Por lo tanto, si los servidores están configurados con diferentes encabezados (políticas) que expiran y almacenan en caché, el estado puede diferir.
En su caso, está utilizando cdn, el objetivo principal de cdn es la alta disponibilidad y la entrega rápida. Por lo tanto, usan múltiples servidores. Aunque parece que los archivos están en el mismo directorio, cdn podría usar múltiples servidores para proporcionar contenido, si esos servidores tienen configuraciones diferentes. Entonces estos estados pueden cambiar. Espero eso ayude.
fuente