search
HomeBackend DevelopmentPHP Tutorial如何在保留 Last-Modifed 的同时让 Chrome 等浏览器不要"from cache"?

我有个WEB应用,服务器端数据是动态生成的,通过程序在服务器端缓存,用 Last-Modified 来标明更新时间。但是在 url 上不加随机数的时候,Google Chrome 总是 "from cache" 而不向服务器发起请求。只有在浏览器开启 ”isable cache (while DevTools is open)“ 才会正常的每次发起请求,服务器返回 304 它才从 cache 取。

我试着加了 Cache-Control: no-cache, Pragma: no-cache 都不行,他总是在第二次就"from cache",我又需要用 Last-Modifed 来减少一些服务器响应的数据量,有什么办法解决这个问题吗?


问题补充:

如果单独请求这个地址,是正常的,第二次、第三次浏览器发出 If-Modififed-Since,但是当请求是在页面内发出的,比如 则他总是在首次后 from cache,除非加上 Expires 让它过期。


发现有人提 BUG https://code.google.com/p/chromium/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Pri%20M%20Iteration%20ReleaseBlock%20Cr%20Status%20Owner%20Summary%20OS%20Modified&groupby=&sort=&id=48445 ,还发现我去年就被这个问题折腾过了(去年在上面留言了)

如何在保留 Last-Modifed 的同时让 Chrome 等浏览器不要


用Etag替代Last-modified就不再有问题了,发现Google正是这么干的。

回复内容:

我有个WEB应用,服务器端数据是动态生成的,通过程序在服务器端缓存,用 Last-Modified 来标明更新时间。但是在 url 上不加随机数的时候,Google Chrome 总是 "from cache" 而不向服务器发起请求。只有在浏览器开启 ”isable cache (while DevTools is open)“ 才会正常的每次发起请求,服务器返回 304 它才从 cache 取。

我试着加了 Cache-Control: no-cache, Pragma: no-cache 都不行,他总是在第二次就"from cache",我又需要用 Last-Modifed 来减少一些服务器响应的数据量,有什么办法解决这个问题吗?


问题补充:

如果单独请求这个地址,是正常的,第二次、第三次浏览器发出 If-Modififed-Since,但是当请求是在页面内发出的,比如 则他总是在首次后 from cache,除非加上 Expires 让它过期。


发现有人提 BUG https://code.google.com/p/chromium/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Pri%20M%20Iteration%20ReleaseBlock%20Cr%20Status%20Owner%20Summary%20OS%20Modified&groupby=&sort=&id=48445 ,还发现我去年就被这个问题折腾过了(去年在上面留言了)

如何在保留 Last-Modifed 的同时让 Chrome 等浏览器不要


用Etag替代Last-modified就不再有问题了,发现Google正是这么干的。

好问题,我之前一直不知道还有这么一个坑。不过这不是浏览器的bug。
这里有一个相似的问题 Why is this response being cached?
我将回答者 Stephen Ostermiller 的答案稍微翻译下

如果你添加了 Last-Modified 首部,但是没有添加 Expires 或者 Cache-Control 首部,浏览器就不得不自行判断它应该将这份资源缓存多久。有些浏览器会将其缓存一天以上。
Google caching best practices guide 里说浏览器会根据 Last-Modified 自行推算缓存时长。
Firefox 的推算方法是:缓存时长 = (Date - Last-Modified) / 10
Chrome / Safari / IE 并没有公布他们的公式或算法。
此类文件的缓存时长通常取决于以下因素

  • 浏览器开辟的缓存空间大小
  • 用户浏览过的站点数量和大小
  • 用户是否关闭了浏览器

所以,你如果不想删掉 Last-Modified,又不想浏览器缓存你的资源,就应该显示地指定过期时间或缓存时长。

THE END

<code>Cache-Control: no-cache, no-store, max-age=0
Pragma: no-cache
Expires: Sat, 26 Jul 1997 05:00:00 GMT
</code>

上面这个是禁止所有缓存的。

不过根据你的描述我更建议这样写

<code>Cache-Control: max-age=0, private, must-revalidate
</code>

点击这里:

如何在保留 Last-Modifed 的同时让 Chrome 等浏览器不要

然后勾上相关的设置

如何在保留 Last-Modifed 的同时让 Chrome 等浏览器不要

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
什么是Updater.exe在Windows 11/10中?这是Chrome进程吗?什么是Updater.exe在Windows 11/10中?这是Chrome进程吗?Mar 21, 2024 pm 05:36 PM

你在Windows上运行的每个应用程序都有一个组件程序来更新它。因此,如果你使用的是谷歌Chrome或谷歌地球,它会运行一个GoogleUpdate.exe应用程序,检查是否有更新可用,然后根据设置进行更新。然而,如果您不再看到它,而是在Windows11/10的任务管理器中看到一个进程updater.exe,这是有原因的。什么是Updater.exe在Windows11/10中?谷歌已经为其所有应用程序推出了更新,如GoogleEarth、GoogleDrive、Chrome等。这次更新带来了

crdownload是什么文件crdownload是什么文件Mar 08, 2023 am 11:38 AM

crdownload是chrome浏览器下载缓存文件,就是没下载完的文件;crdownload文件是一种临时文件格式,用于储存从硬盘上下载的文件,它能够帮助用户在下载文件时保护文件完整性,避免受到意外中断或停止的情况。CRDownload文件也可以用于备份文件,它可以让用户保存文件的临时副本;如果在下载时出现意外错误,就可以使用CRDownload文件来恢复已下载的文件。

chrome无法加载插件怎么办chrome无法加载插件怎么办Nov 06, 2023 pm 02:22 PM

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。其解决方法如下:1、检查插件是否已正确安装,重新安装即可;2、禁用和启用插件,点击禁用按钮,然后再次点击启用按钮即可;3、清除插件缓存,选择高级选项>清除浏览数据,勾选缓存图片和文件和清除所有Cookies,点击清除数据即可。

解决谷歌浏览器无法打开网页的方法解决谷歌浏览器无法打开网页的方法Jan 04, 2024 pm 10:18 PM

谷歌浏览器网页打不开怎么办?有很多小伙伴都喜欢上使用谷歌浏览器,当然也有部分小伙伴在使用的过程中发现自己无法正常的打开网页或者说网页打开的速度很慢,那么遇到这种情况要怎么办呢?下面就和小编来看看谷歌浏览器网页打不开的解决方法吧。谷歌浏览器网页打不开的解决方法方法一为了帮助还没有过关的玩家们,让我们一起来了解一下具体的解谜方法吧。首先,右键点击右下角的网络图标,然后选择“网络和Internet设置”。2、点击"以太网",接着点击"更改适配器选项"。3、点击”属性“按钮。4、双击打开i

Chrome的插件扩展程序安装目录是什么Chrome的插件扩展程序安装目录是什么Mar 08, 2024 am 08:55 AM

Chrome的插件扩展程序安装目录是什么?正常情况下,Chrome插件扩展程序的默认安装目录如下:1、windowsxp中chrome插件默认安装目录位置:C:\DocumentsandSettings\用户名\LocalSettings\ApplicationData\Google\Chrome\UserData\Default\Extensions2、windows7中chrome插件默认安装目录位置:C:\Users\用户名\AppData\Local\Google\Chrome\User

JAVA发送HTTP请求的方式有哪些JAVA发送HTTP请求的方式有哪些Apr 15, 2023 am 09:04 AM

1.HttpURLConnection使用JDK原生提供的net,无需其他jar包,代码如下:importcom.alibaba.fastjson.JSON;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.net.HttpURLConnection;

如何在Chrome和Edge的所有选项卡中搜索文本如何在Chrome和Edge的所有选项卡中搜索文本Feb 19, 2024 am 11:30 AM

本教程向您展示了如何在Windows的Chrome或Edge中找到所有打开的标签页上的特定文本或短语。有没有办法在Chrome中所有打开的标签页上进行文本搜索?是的,您可以使用Chrome中的免费外部Web扩展在所有打开的标签上执行文本搜索,无需手动切换标签。一些扩展如TabSearch和Ctrl-FPlus可以帮助您轻松实现这一功能。如何在GoogleChrome的所有选项卡中搜索文本?Ctrl-FPlus是一个免费的扩展,它方便用户在浏览器窗口的所有选项卡中搜索特定的单词、短语或文本。这个扩

chrome是什么意思chrome是什么意思Aug 07, 2023 pm 01:18 PM

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一,其名字来源于浏览器的界面设计,因为它的标志性特征就是窗口顶部的标签栏,而这个标签栏的外观与铬金属非常相似。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment