标签: browser-cache

浏览器缓存视频文件的方式与其他文件类型不同吗

在尝试测试视频文件何时加载到网页上时,我在尝试将其从 Chrome 浏览器缓存中删除时遇到了问题。

当硬重新加载、清除浏览器缓存或在 Chrome 开发工具中选中禁用缓存时,我无法让文件重新出现在开发工具的网络面板中。

我可以重新加载文件的唯一方法是启动一个新的私人浏览选项卡或等待几分钟,然后重新加载文件。

似乎发生在以下页面以及我自己的页面上: http://www.quirksmode.org/html5/tests/video.html

这似乎也发生在许多其他浏览器以及 Chrome 上。

那么,Chrome 和其他浏览器对视频文件的缓存是否与其他文件不同(可能是为了节省带宽),除了为每次页面刷新启动一个新的隐私浏览选项卡之外,是否有更简单的方法可以在测试时强制重新加载视频文件?

google-chrome browser-cache html5-video google-chrome-devtools

5
推荐指数
0
解决办法
747
查看次数

从 JavaScript 加载图像时出现 304 Not Modified

在我的页面上,我有以下使用 jQuery 的 JavaScript:

$("#my-div").append($("<img>", {src: "/api/userimage/"+imageHash}));
Run Code Online (Sandbox Code Playgroud)

当服务器返回200 OK图像时它工作正常,但当它返回时则不行304 Not Modified。在后一种情况下,浏览器仅显示“损坏的图像”占位符。

如何让浏览器在出现 304 错误时从缓存中获取图像?我不想使用技巧来绕过缓存,因为缓存未更改的图像正是我想要的。

对于其他资源(.js 和 .css 文件),服务器还会返回 304。这些工作正常,因为它们直接来自静态 HTML 标记,而不是来自 JavaScript。如果重要的话,我正在使用 HTTPS。

如果从上述描述中解决方案不明显,我可以提供更多详细信息。

javascript jquery http http-status-codes browser-cache

5
推荐指数
0
解决办法
1637
查看次数

发布新版本的 SPA 时如何重新加载模板(html)?

目前,我在发布新版本的 SPA 时遇到了麻烦,因为 html 模板已被浏览器缓存。

我的 SPA 使用 Angular 1.5、ocLazyload 和 ui-router。我已经将 gulp 任务配置为使用缓存清除技术(使用gulp-rev),并且它运行得很好,至少对于脚本和 css 文件来说是这样。然而,当我们对 html 文件进行更改时,浏览器会继续加载旧版本。有时即使使用Ctrl+F5刷新页面也无法解决问题,并且一直显示旧版本的html。

此外,将浏览器配置为不缓存 html 文件是不可取的(特别是对于移动设备),因为 html 更改可能不会经常发生。

有没有什么好的解决方案可以解决这个问题,仅当有新版本时才获取 html 文件?

提前致谢!

html browser-cache angularjs oclazyload

5
推荐指数
1
解决办法
3555
查看次数

缓存导致重定向的 img src

我想让浏览器缓存重定向的响应。

我将标签src上的属性设置img为重定向到最终资源的 url。重定向仅在短时间内有效(例如 15 分钟),但下载的实际内容是长期有效的(即可以安全地存储一年)。我正在设置Cache-Control: max-age: <1 year>图像响应,但是由于重定向只能使用 15 分钟,所以我设置了Cache-Control: max-age: <15 minutes>. 我怎样才能告诉浏览器使用最终响应的缓存设置,甚至不必在后续页面视图中遵循重定向?

3XX我使用什么类型的重定向 ( ) 有关系吗?

这与:Chrome 和 Safari 缓存 302 重定向有关,但我实际上希望他们将其视为错误。

http http-caching browser-cache http-status-code-301 http-status-code-302

5
推荐指数
0
解决办法
269
查看次数

$window.location.reload(true) 相当于 CTRL+F5 吗?

我正在尝试构建一个“版本更新”组件,该组件将在网站更新时显示横幅并提示用户重新加载。不幸的是,当某些用户重新加载其页面时,其页面会被缓存,因此无法正确更新。之前我们告诉他们按 CTRL+F5,但我正在寻找一种以编程方式执行此操作的方法。

我正在使用以下代码

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

其函数签名声明如下:

reload(forcedReload?: boolean): void;
Run Code Online (Sandbox Code Playgroud)

这是否意味着它将跳过缓存?当我尝试使用 CTRL+F5 时,index.html 在 Chrome 的“网络”选项卡中显示 200,但使用时$window.location.reload(true)显示 304 [未修改]

javascript browser-cache angularjs

5
推荐指数
1
解决办法
2759
查看次数

Google Chrome 不使用本地磁盘/内存缓存进行 304 html 响应 - 行为发生变化?

Google Chrome 浏览器不使用磁盘(或内存)缓存来响应 html。chrome 的行为改变了吗?Javascript/css 文件看起来没问题,但 html 不行。

相同的 html 响应确实会在 Firefox 和 Edge 中本地缓存。

下面是 html/js 响应示例。两个响应的 HTTP 状态代码都是 304,并且响应不是 https。我在现有网址的浏览器栏中按 Enter 键,因此没有使用刷新。点击后退/前进浏览器按钮会产生相同的结果。

html 响应标头( Chrome 上不使用Chrome 磁盘/内存缓存,但在 Edge/FF 上使用) - 请注意,这是一个动态页面,而不是静态 html 页面,因此该 url 没有 .html 扩展名:

Cache-Control:public, max-age=3600
Content-Type:text/html
Content-Encoding:gzip
Date:Wed, 08 Nov 2017 09:57:31 GMT
ETag:"627b1769f19f9ff568faf620ea25d144"
Vary:Accept-Encoding
Run Code Online (Sandbox Code Playgroud)

.js 文件响应标头(磁盘/内存缓存在包括 Chrome 在内的所有浏览器中使用):

Accept-Ranges:bytes
Cache-Control:public, max-age=3600
Content-Encoding:gzip
Content-Type:application/javascript
Date:Wed, 08 Nov 2017 09:41:39 GMT
ETag:"1d2bce813ee8a28"
Last-Modified:Mon, 24 Apr 2017 10:46:50 GMT
Transfer-Encoding:chunked …
Run Code Online (Sandbox Code Playgroud)

etag google-chrome browser-cache

5
推荐指数
0
解决办法
1677
查看次数

如何使 S3 Cloudfront 上部署的 Gatsby 网站上的服务工作线程缓存失效?

我正在建立我的第一个盖茨比网站。我们将其托管在 AWS S3 上。我们也使用gatsby-plugin-offline.

到目前为止,我无法找到关于如何在新部署后使缓存失效的良好解决方案。

即使我手动取消注册 sw.js Service Worker 并通过 Devtools -> 应用程序 -> 清除存储清理站点数据,浏览器仍然会加载缓存版本(缺少添加的页面、显示旧文本内容等)。

对于部署,我使用amplify.

部署新版本时如何使旧缓存失效?

谢谢。

deployment browser-cache amazon-cloudfront gatsby

5
推荐指数
1
解决办法
1141
查看次数

使用 nginx 的 Angular i18n json 缓存问题

我在 de.json 和 en.json 等 json 文件中使用 Angular 和 i18n 翻译。在我的生产环境(nginx)中,我遇到了这些 JSON 文件被 Web 浏览器缓存的问题。升级后,即使日期标头已更改,Chrome 也不会下载当前 json 文件的新版本。

请求信息(Chrome):

响应标头:

  • 内容编码:gzip
  • 内容类型:应用程序/json
  • 日期: 2019 年 2 月 15 日星期五 09:04:42 GMT
  • etag:W/“5c62bf4d-2aea”
  • 最后修改时间:2019 年 2 月 12 日星期二 12:42:53 GMT
  • 服务器:nginx/1.14.0 (Ubuntu)
  • 状态:304

有没有人有解决这个问题的经验并且可以帮助我?

json nginx browser-cache angular-i18n angular

5
推荐指数
1
解决办法
2325
查看次数

ASP.NET core:HTTP HEAD 请求和 Content-Length 标头

这个问题与 ASP.NET core 2.2 Web 应用程序(针对 .NET core)相关,该应用程序公开了一些使用 mvc 中间件实现的 Web api 控制器。所有控制器中可用的所有操作方法都必须响应 GET 和 HEAD http 方法。

我们注意到 ASP.NET Core 自动添加Transfer-Encoding带有值的标头chunked,并根据规范省略标Content-Length头(有关更多详细信息,请参阅此 MDN 页面)。

根据ASP.NET core 存储库上的这个 github 问题,这种行为似乎取决于 Kestrel Web 服务器的精确设计决策,因此这是预期的行为。

也就是说,每次我们向应用程序的任何路由发出 HEAD 请求时,Content-Length即使相应的 GET 请求(我的意思是具有相同路径的 GET 请求)返回非空响应正文,我们也会得到标头设置为 0 的响应。

根据我在各种来源上读到的内容,似乎Content-Length标头对于 HEAD 请求的响应不是必需的,但当包含标头时,它应该具有与相应 GET 请求相同的值。因此,我们在每个 HEAD 请求上看到的值0对我来说似乎不正确。

Transfer-Encoding对于相应的 GET 请求,ASP.NET Core 通过使用块发送响应(如上所述,总是chunked针对 GET 请求),这是否是事实的副作用?

另一个疑问与向我们的应用程序发出 HEAD 请求的任何类型的缓存有关,以便决定是否清除缓存的响应:零值 Content-Length 是否会对缓存行为的正确性带来风险? …

http browser-cache http-content-length asp.net-core asp.net-core-webapi

5
推荐指数
0
解决办法
3671
查看次数

ServiceWorker / 缓存 / 设置 TTL

关于这个api https://developer.mozilla.org/en-US/docs/Web/API/Cache,我还想设置cache lifetime.

比方说,cache this request for no longer than 10 minutes

javascript browser-cache service-worker service-worker-events

5
推荐指数
1
解决办法
3513
查看次数