【问题标题】:The files served by my Apache Server are not being saved on browser cache我的 Apache 服务器提供的文件未保存在浏览器缓存中
【发布时间】:2016-06-20 17:29:42
【问题描述】:

我已经安装并配置了一个带有提供图像的虚拟主机的 Apache 服务器。

当我第二次在浏览器上加载带有图像的页面时(第一次加载页面后图像应该在缓存中),浏览器没有从缓存中获取图像(或文件),并认为它应该。

怎么了?我使用的是谷歌浏览器,当我从其他服务器加载其他网站时,缓存会起作用,所以我认为我的 Apache 有问题,但我不确定。

非常感谢。

响应是由 Dash 播放器播放的视频片段。

响应标头:

accept-ranges:bytes
content-length:194431
date:Wed, 09 Mar 2016 07:42:07 GMT
etag:"2f77f-52acd33f8b167"
last-modified:Tue, 02 Feb 2016 17:55:12 GMT
server:Apache/2.4.18 (Unix) OpenSSL/1.0.2e PHP/7.0.2
status:200

之后:

ExpiresActive On

# Set up caching on media files for 1 year (forever?)
<FilesMatch "\.(mp4|m4s)$">
ExpiresDefault "access plus 3600 seconds"
Header set Cache-Control "public"
Header set Content-Type "video/mp4"
Header set Vary "Host"
Header set Access-Control-Allow-Origin "*"
</FilesMatch>

标题是:

accept-ranges:bytes
access-control-allow-origin:*
cache-control:public
content-length:194431
content-type:video/mp4

但它不会保存在缓存中,我的意思是,当我重新加载网页或视频时,它并没有从缓存中获取它应有的内容。

【问题讨论】:

  • 请编辑您的问题以包含请求您的图片时返回的 HTTP 标头,否则无法回答。

标签: apache google-chrome caching


【解决方案1】:

您没有包含任何告诉浏览器缓存资源的缓存控制标头。规范尚不清楚如何处理此问题,但大多数浏览器选择不缓存,除非明确告知。

您需要像这样包含 Apache 配置(假设您已经包含 mod_expiries 模块):

ExpiresActive On

# Set up caching on media files for 1 week
<filesMatch ".([iI][cC][oO]|[gG][iI][fF]|[jJ][pP][gG]|[jJ][pP][eE][gG]|[pP][nN][gG]|[fF][lL][vV]|[pP][dD][fF]|[sS][wW][fF]|[mM][oO][vV]|[mM][pP]3|[wW][mM][vV]|[pP][pP][tT])$">
   ExpiresDefault A604800
   Header append Cache-Control "public"
</filesMatch>

# Set up caching on font files for 6 months
<filesMatch ".([eE][oO][tT]|[tT][tT][fF]|[sS][vV][gG]|[Ww][Oo][Ff][Ff]|[Ww][Oo][Ff][Ff]2)$">
   ExpiresDefault 15552000
   Header append Cache-Control "public"
</filesMatch>

然后会产生这样的标题:

cache-control:max-age=10800, public

如果您想了解更多详细信息,我已经写了一篇博文:https://www.tunetheweb.com/performance/http-performance-headers/caching/

【讨论】:

  • 感谢您的回答,但正如我在问题上所说的那样,我无法达到将文件保存在缓存上的目标(我在那里写了更多的东西)。谢谢你的帮助!!!
【解决方案2】:

好的,我已经解决了这个问题。

我使用的是 https 连接并且我使用的证书没有正确的参数(通用名称必须是服务器上编程的 url 的名称)并且服务器的证书必须由某个 CA 进行身份验证,所以我已制作 CA 证书以验证服务器证书。这意味着如果您的 https 连接不安全,Chrome 不会将文件保存在缓存中。

纠正所有证书后,我已将证书上传到谷歌浏览器以信任我的网络(谷歌浏览器配置、高级选项、管理 https/ssl 证书)。之后,我可以将文件保存在缓存中,因为证书使 https 连接安全(chrome url 栏上的绿色锁)。

这是我的问题,我就是这样解决的。

感谢您的回答和您的时间!! ;)

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 2013-06-06
    • 1970-01-01
    • 2018-02-22
    • 2012-03-26
    • 2012-12-14
    • 2012-10-15
    • 2016-07-08
    • 2015-05-09
    相关资源
    最近更新 更多