标签: browser-cache

如何利用.woff字体的浏览器缓存?

在PageSpeed Insights中,我一直看到消息来利用我正在使用的特定图标集/字体的浏览器缓存:iconFont.woff(2天)

我把我的.htaccess设置为:

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType font/ttf "access 1 week"
ExpiresByType font/woff "access 1 week"
ExpiresByType image/jpg "access 1 month"
ExpiresByType image/jpeg "access 1 month"
ExpiresByType image/gif "access 1 month"
ExpiresByType image/png "access 1 month"
ExpiresByType text/css "access 1 week"
ExpiresByType application/pdf "access 1 month"
ExpiresByType application/javascript "access 1 month" 
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>
## EXPIRES CACHING ##
Run Code Online (Sandbox Code Playgroud)

尽管如此,我仍然在PageSpeed Insights中收到相同的消息.如何正确缓存?

browser-cache woff

25
推荐指数
2
解决办法
4万
查看次数

如何阅读Chrome缓存文件?

我经常在今天讨论的一个论坛,在恢复后,我发现最后两天的论坛发帖已完全回滚.

毋庸置疑,我想从论坛中找回我可以丢失的数据,我希望我至少有一些数据存储在Chrome创建的缓存文件中.

我面临两个问题 - 缓存文件没有文件类型,我不确定如何以智能方式阅读它们(尝试在Chrome中打开它们似乎以.gz格式"重新下载"它们),并且有一的缓存文件.

有关如何阅读和排序这些文件的任何建议?(一个简单的字符串搜索应该符合我的需要)

google-chrome browser-cache

24
推荐指数
7
解决办法
15万
查看次数

浏览器使用什么启发式来缓存未明确设置为可缓存的资源?

13.2.2启发式过期

由于源服务器并不总是提供明确的到期时间,因此HTTP缓存通常会分配启发式到期时间,采用使用其他标头值(例如Last-Modified时间)的算法来估计合理的到期时间.HTTP/1.1规范没有提供特定的算法,但确实对其结果施加了最坏情况的约束.由于启发式到期时间可能会影响语义透明度,因此应谨慎使用,我们鼓励源服务器尽可能提供明确的到期时间. HTTP/1.1 RFC 2616

浏览器使用什么算法来估算合理的到期时间?

理想的答案将涵盖所有主要浏览器,并提供源代码或官方博客文章的证据.

safari firefox internet-explorer google-chrome browser-cache

24
推荐指数
5
解决办法
4438
查看次数

如何在Nginx上配置ETag

我正在使用Nginx作为网络服务器,并希望实现一种浏览器缓存方法,以便用户在本地保存静态未更改文件的副本,并仅下载已更改的文件.其中一个建议是使用文件时间戳来找出已更改的文件并仅刷新它们,但在我的情况下这是不可能的,因为在每次新部署之后都会创建整个Web应用程序的新版本以及所有文件的时间戳更改.

我研究了一下ETag标题,它似乎是一个非常好的解决方案,但我发现Etags尚未得到Nginx的正式支持.

有没有办法在Nginx上实现Etags或任何替代解决方案?

etag nginx browser-cache

23
推荐指数
2
解决办法
6万
查看次数

chrome浏览器如何确定内存缓存和磁盘缓存?

我知道chrome支持from memory cache,from disk cache当我请求资源时.我以前没见过from memory cache.BTW如何确定哪些资源应该缓存在内存中?

在此输入图像描述

caching google-chrome browser-cache

22
推荐指数
1
解决办法
2314
查看次数

浏览器缓存 - 为什么IE9在没有进入网络的情况下总是显示http 304?

我正在尝试正确设置缓存并将Expires标头设置为将来365天正常工作但未在IE9中正确显示.有谁知道为什么?

当您访问IE9中的任何网站(例如www.google.com),然后在地址栏中单击Enter以使用完全缓存重新访问它,它显示了Fiddler未显示的许多额外304.

查看网络检查器选项卡(在F12上),IE9显示它已收到针对CSS和JS文件的304 Not Modified响应和3个图像(可能是大约在过去一个月内修改日期的图像 - 其他30个未显示的图像较旧).

但是,根据Fiddler并在我正在开发的网站上查看服务器上的IIS日志,它实际上并没有提出这些请求.IE9网络时间线显示这些灰色302s没有等待时间和"<1 ms"响应时间 - 而如果我按F5它们也是灰色302s,但显示等待和下载时间几毫秒(并且它们命中网络).

那么为什么IE9网络检查员认为它发布了这些条件请求呢?在它到达Fiddler之前,它是否实际发出了某个网络堆栈满足的请求?

Chrome会将所有请求(包括所有图片)显示为灰色200(来自缓存),而不是页面本身(黑色200)(根据Fiddler和IIS日志,这是正确的).

Firebug为CSS和JS显示灰色200 OK,奇怪的是只有一个图像(也正确,假设灰色200表示来自缓存 - 但为什么只显示这些资源而不是所有其他图像?)

我一直在阅读Eric Lawrence关于IE9缓存和网络堆栈的博文,但他没有提到这种奇怪的行为.

http fiddler browser-cache internet-explorer-9

21
推荐指数
1
解决办法
9865
查看次数

使用Javascript [no cache]强制在Chrome中重新加载页面

我需要使用JavaScript重新加载页面,并确保它不会从浏览器缓存中提取,而是从服务器重新加载页面.[由于页面元素在过渡期间会发生变化]

在IE和FF上,我发现以下代码工作正常;

window.location.reload(true);
Run Code Online (Sandbox Code Playgroud)

但是它不适用于Chrome或Safari.

我试过以下,但也无济于事;

window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);
Run Code Online (Sandbox Code Playgroud)

这个问题有解决方案吗?

发现

在调查之后我发现这个问题是HTTP协议处理;

  1. Chrome通过Pragma: no-cacheHTTP字段发送请求
  2. 服务器响应Last-Modified: DATE1字段
  3. JS用于location.reload(true)强制从服务器重新加载而不是缓存
  4. Chrome通过If-Modified-Since: DATE1字段发送请求
  5. 服务器响应 HTTP Status 304 Not Modified

服务器应用程序因未注意到动态页面内容中的状态更改而出错,因此不返回a 200.但是,Chrome/WebKit是唯一一个If-Modified-Sincelocation.reload(true)调用JS时发送字段的浏览器.

我想我会把我的发现放在这里以防其他人遇到同样的问题.

javascript safari webkit google-chrome browser-cache

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

如何在es6中缓存胸部导入的模块?

ES6模块允许我们创建一个单一的入口点,如下所示:

// main.js

import foo from 'foo';

foo()
Run Code Online (Sandbox Code Playgroud)
<script src="scripts/main.js" type="module"></script>
Run Code Online (Sandbox Code Playgroud)

foo.js将存储在浏览器缓存中.在我将新版本的foo.js推向生产之前,这是可取的.

通常的做法是添加一个具有唯一ID的查询字符串参数,以强制浏览器获取新版本的js文件(foo.js?cb = 1234)

如何使用es6模块模式实现这一目标?

browser-cache web es6-modules

21
推荐指数
3
解决办法
2049
查看次数

如何清除浏览器后面的浏览器缓存按钮单击MVC4?

我知道这是stackoverflow中的一个流行问题.我已经经历了每一个相同的问题,我无法为我找到正确的答案.这是我的注销控制器动作结果

    [Authorize]       
    public ActionResult LogOut(User filterContext)
    {
        Session.Clear();
        Session.Abandon();
        Session.RemoveAll();
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
        Response.Cache.SetNoStore();
        FormsAuthentication.SignOut();
        return RedirectToAction("Home", true);

    }
Run Code Online (Sandbox Code Playgroud)

它对我不起作用.我也尝试添加 -

<meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv="Pragma" content="no-cache"/> <meta http-equiv="Expires" content="0"/>

这些都没有解决我的问题.

c# asp.net-mvc browser-cache asp.net-mvc-4

20
推荐指数
2
解决办法
4万
查看次数

如何使Webpack使用缓存后缀?

在Webpack之前,我总是依赖于以下模式来进行"缓存清除":

<script src="foo.js?cacheBust=12345" />
Run Code Online (Sandbox Code Playgroud)

哪个12345是服务器在每个构建时为我生成的标记(它可能是Git哈希,尽管在我的情况下它不是).

有了Webpack,我现在有两个文件:build.jschunk.1.js.由于我使用正常的脚本标记带来第一个,我可以使用上面的模式:

<script src="build.js?cacheBust=12345" />
Run Code Online (Sandbox Code Playgroud)

但是,此时build.js会进行提取chunk.1.js,并且当它执行时,它不包括缓存无效的后缀.

我想让Webpack自动附加?cacheBust=12345,但我不知道12345构建时的部分,所以我不能把它包含在我的webpack.config.相反,我必须等到HTML页面被评估,此时我从服务器获取令牌.

所以,我的问题是,有没有办法让Webpack查看用于获取初始文件的参数(例如.?cacheBust=12345)并在获取其他文件时附加相同的参数?

javascript browser-cache webpack

20
推荐指数
3
解决办法
1万
查看次数