相关疑难解决方法(0)

HTTP状态代码200(缓存)与状态代码304之间有什么区别?

我正在使用谷歌的"Page Speed"插件来访问我的网站.

我页面上的一些组件表示为HTTP状态:

200 200(缓存)304

通过谷歌的"页面速度".

我困惑的是200(缓存)和304之间的区别.

我已多次刷新页面(但尚未清除我的缓存),似乎我的favicon.ico和一些图像状态= 200(缓存),而其他一些图像是http状态304.

我不明白为什么不同.

更新:

使用Google"Page Speed",我收到了http://example.com/favicon.ico的"200(缓存)" 以及http://cdn.example.com/js/ga.js

但是,我收到http://cdn.example.com/js/combined.min.js的http状态"304"

我不明白为什么我有两个JavaScript文件位于同一目录/ js /中,一个返回http状态304,另一个返回200(缓存)状态代码.

caching http cache-control httpwebrequest http-status-codes

194
推荐指数
4
解决办法
16万
查看次数

"304 Not Modified"如何运作?

  • 如何生成"304 Not Modified"?

  • 浏览器如何确定对http请求的响应是否为304?

  • 是由浏览器设置还是从服务器发送?

  • 如果由服务器发送,服务器如何知道缓存中可用的数据,它如何将304设置为图像?

我的猜测,如果由浏览器生成

function is_modified()
{
    return get_data_from_cache() === get_data_from_url();
};

function get_data_from_cache()
{
    return some_hash_or_xxx_function(cache_data);
}

function get_data_from_url()
{
     return some_hash_or_xxx_function(new_data);
}

function some_hash_or_xxx_function(data)
{
  // do something with data
  // what is that algorithm.?
      return result;
}

console.log(is_modified());
Run Code Online (Sandbox Code Playgroud)

我依靠第三方API提供程序来获取数据,解析并将其推送到数据库.在每个请求期间数据可能会也可能不会发生变化,但是标题总是发送200,我不想解析,检查DB中的最后一个唯一ID等等来确定数据的变化,也不直接比较结果而是我md5(),sha1()&crc32()HASHed结果和工作正常,但想知道算法来确定304.

我想使用相同类型的算法来确定数据的变化.

browser http http-headers http-status-code-304

165
推荐指数
2
解决办法
15万
查看次数

停止浏览器对应该保持缓存的图像发出HTTP请求 - mod_expires

在这里阅读了很多文章和一些问题后,我终于成功激活了Apache mod_expires,告诉浏览器它必须缓存1年的图像.

<filesMatch "\.(ico|gif|jpg|png)$">
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
  Header append Cache-Control "public"
</filesMatch>
Run Code Online (Sandbox Code Playgroud)

谢天谢地,服务器响应似乎是正确的:

HTTP/1.1 200 OK 
Date: Fri, 06 Apr 2012 19:25:30 GMT 
Server: Apache 
Last-Modified: Tue, 26 Jul 2011 18:50:14 GMT 
Accept-Ranges: bytes 
Content-Length: 24884 
Cache-Control: max-age=31536000, public 
Expires: Sat, 06 Apr 2013 19:25:30 GMT
Connection: close
Content-Type: image/jpeg 
Run Code Online (Sandbox Code Playgroud)

好吧,我认为这会阻止浏览器下载甚至向服务器询问有关图像的信息,为期1年.但部分原因:如果您关闭并重新打开浏览器,浏览器不会再从服务器下载图像,但浏览器仍然会向每个图像发送HTTP请求来询问服务器.

如何强制浏览器停止为每个图像发出HTTP请求?即使这些HTTP请求后面没有下载的图像,它们仍然是向服务器发出的请求,这些请求可能会造成延迟,并减慢页面渲染速度!

我已经告诉浏览器它必须将图像保存在缓存中1年!为什么浏览器仍在为每个图像查询服务器(即使它没有下载图像)?!


查看FireBug中的网络图(菜单FireBug> Net> Images)我可以看到不同的缓存行为(我显然开始使用浏览器缓存完全空,我使用"清除所有历史记录"强制在浏览器上删除缓存):

  • 当第一次加载页面时,所有图像都被下载(如果我通过单击浏览器的重新加载页面按钮强制页面重新加载,则会发生同样的事情).这很有道理!

  • 当我浏览网站并返回同一页面时,根本不会下载图像,浏览器甚至不会向服务器询问 …

browser caching mod-expires http-headers

45
推荐指数
5
解决办法
3万
查看次数