Ruby on rails 谷歌浏览器没有缓存图像

Ruby on rails 谷歌浏览器没有缓存图像,ruby-on-rails,google-chrome,caching,assets,Ruby On Rails,Google Chrome,Caching,Assets,我正在尝试用RubyonRails优化我的应用程序,我意识到我的应用程序中的图片是加载最长时间的,但我也注意到了另一个问题,那就是google chrome没有缓存图片 我注意到这一点是因为在Google开发者控制台中,你可以看到Google Chrome请求加载在真正加载图像之前被取消的图像 这可以在这里看到,首先我打开谷歌开发者控制台,然后刷新页面,在那里的第一个请求中,你可以看到图像,但它们立即被取消 之后,您可以看到实际加载图像的请求 如果在响应头中可以看到缓存控制设置为public

我正在尝试用RubyonRails优化我的应用程序,我意识到我的应用程序中的图片是加载最长时间的,但我也注意到了另一个问题,那就是google chrome没有缓存图片

我注意到这一点是因为在Google开发者控制台中,你可以看到Google Chrome请求加载在真正加载图像之前被取消的图像

这可以在这里看到,首先我打开谷歌开发者控制台,然后刷新页面,在那里的第一个请求中,你可以看到图像,但它们立即被取消

之后,您可以看到实际加载图像的请求

如果在响应头中可以看到
缓存控制设置为
public
,并且
max age=31536…

我将图像以以下方式放入应用程序:

<div class="col-xs-3"><%= image_tag "#{@hero.id}/ability_1.png", class: "center-block"%></div>

图像组织在
app/assets/images

有没有办法解决这个问题


编辑:现在在Windows中测试我的应用程序(在Heroku中)时,我注意到事实上Google Chrome有时会缓存图像,但50%的情况都是这样(当我在Ubuntu开发时,它一次也不工作),而在firefox中,第一次加载图像时,但后来我加载同一个视图时,我甚至没有注意到重新加载,这很好,为什么谷歌Chrome不是这样?Google Chrome的行为如此怪异是正常的吗?

看起来Chrome处理图像缓存的方式不同。您正在执行哪种类型的重新加载(以下链接,按地址栏中的enter键,Ctrl+r)?看起来,如果在搜索栏中按enter键,它将考虑最大年龄,但如果使用Ctrl+r,Chrome将最大年龄设置为0


在分析浏览器缓存时,要了解的最重要的事情是“状态代码”。在您的示例中,您可以看到您得到了一个“304”,表示“未修改”,这意味着浏览器“可能会使用其缓存”。所以你实际上是在缓存。缓存!=没有点击你的网络服务器

定义依据:

这用于缓存目的。它告诉客户响应尚未修改。所以,客户端可以继续使用相同的缓存版本的响应

它将etag和上次修改发送到您的web服务器,然后您的web服务器查看这些元数据并说“不,这个文件没有更改,所以请随意使用您的缓存”,就这样。它实际上不会再次发送文件。您可以看到,“大小”比“200”状态码时小得多,此时web服务器正在发送文件,并且时间也应该短得多

在Chrome中,您可以通过选中网络选项卡中的“禁用缓存”选项强制“非缓存”


希望有帮助

您可以使用清单文件强制缓存。网上有很多关于这个话题的文档。这里有一个启动程序:

请求头包含max age=0。尝试将其设置为一个大数字

+1清楚地解释了304,但我认为这并没有真正解决OP的基本问题:考虑到
缓存控制
响应头中的
max age
设置,为什么Chrome会发出条件GET请求?