我正在使用谷歌“页面速度”Firefox插件访问我的网站。
我的页面上的一些组件显示为HTTP状态:
200
200(缓存)
304
谷歌的“页面速度”。
我困惑的是200(缓存)和304之间的区别。
我已经刷新了页面多次(但没有清除我的缓存),它似乎总是我的favicon.ico和一些图像是状态=200(缓存),而其他一些图像是http状态304。
我不明白有什么不同。
更新:
使用谷歌“页面速度”,我收到一个“200(缓存)”http://example.com/favicon.ico以及http://cdn.example.com/js/ga.js
但是,我收到了http://cdn.example.com/js/combined.min.js的http状态“304”
我不明白为什么我有两个JavaScript文件位于同一目录/js/,一个返回http状态304和另一个返回200(缓存)状态代码。
最后一个问题,为什么?我会用我所知道的来解释
用门外汉的术语对这三个状态代码进行简要解释。
200 - success(浏览器请求并从服务器获取文件)
如果在服务器中启用了缓存
200(从内存缓存)-文件在浏览器中找到,所以浏览器不会从服务器请求
浏览器请求一个文件,但是被服务器拒绝
对于一些文件,浏览器决定从服务器请求,而对于一些文件,它决定从存储(缓存)文件读取。为什么会这样?每个文件都有有效期,所以
如果一个文件没有过期,那么浏览器将使用从缓存(200缓存)。
如果文件过期,浏览器请求服务器获取一个文件。服务器检查文件在两个地方(浏览器和服务器)。如果发现相同的文件,服务器拒绝请求。按照协议浏览器使用现有的文件。
看看这个nginx配置
location / {
add_header Cache-Control must-revalidate;
expires 60;
etag on;
...
}
在这里,过期时间设置为60秒,因此所有静态文件都会缓存60秒。所以如果你在60秒内再次请求一个文件,浏览器将从内存中读取(200内存)。如果你在60秒后请求,浏览器将请求服务器(304)。
我假设文件在60秒后没有改变,在这种情况下,你会得到200(即,更新的文件将从服务器获取)。
因此,如果服务器配置了不同的过期和缓存头(策略),状态可能会有所不同。
在您使用cdn的情况下,cdn的主要目的是高可用性和快速交付。因此他们使用多个服务器。即使看起来文件在同一个目录中,cdn可能使用多个服务器来提供u内容,如果这些服务器具有不同的配置。然后这些状态可以改变。希望能有所帮助。
最后一个问题,为什么?我会用我所知道的来解释
用门外汉的术语对这三个状态代码进行简要解释。
200 - success(浏览器请求并从服务器获取文件)
如果在服务器中启用了缓存
200(从内存缓存)-文件在浏览器中找到,所以浏览器不会从服务器请求
浏览器请求一个文件,但是被服务器拒绝
对于一些文件,浏览器决定从服务器请求,而对于一些文件,它决定从存储(缓存)文件读取。为什么会这样?每个文件都有有效期,所以
如果一个文件没有过期,那么浏览器将使用从缓存(200缓存)。
如果文件过期,浏览器请求服务器获取一个文件。服务器检查文件在两个地方(浏览器和服务器)。如果发现相同的文件,服务器拒绝请求。按照协议浏览器使用现有的文件。
看看这个nginx配置
location / {
add_header Cache-Control must-revalidate;
expires 60;
etag on;
...
}
在这里,过期时间设置为60秒,因此所有静态文件都会缓存60秒。所以如果你在60秒内再次请求一个文件,浏览器将从内存中读取(200内存)。如果你在60秒后请求,浏览器将请求服务器(304)。
我假设文件在60秒后没有改变,在这种情况下,你会得到200(即,更新的文件将从服务器获取)。
因此,如果服务器配置了不同的过期和缓存头(策略),状态可能会有所不同。
在您使用cdn的情况下,cdn的主要目的是高可用性和快速交付。因此他们使用多个服务器。即使看起来文件在同一个目录中,cdn可能使用多个服务器来提供u内容,如果这些服务器具有不同的配置。然后这些状态可以改变。希望能有所帮助。