每次从服务器加载index.html而不从缓存加载

Pul*_*tal 46 html webserver caching

我在特定服务器上托管了一个网页index.html.我指出example.comexample.com/index.html.因此,当我在index.html中进行更改并保存它,然后尝试打开example.com时,不会反映更改.网页被缓存的原因.

然后我手动刷新页面,因为它加载了新的副本,而不是从缓存,它工作正常.但我不能要求我的客户这样做,他们希望一切都很完美.所以我的问题是,我是如何从服务器而不是从缓存中每次加载文件的技巧或技巧?

PS:我知道CSS,JS和图像文件的技巧,即附加?v=1但不知道如何为index.html执行此操作.

任何帮助,将不胜感激.谢谢!

don*_*yor 46

这样:

<meta http-equiv="expires" content="0">
Run Code Online (Sandbox Code Playgroud)

将内容设置为"0"表示浏览器始终从Web服务器加载页面.

  • 考虑将常识折叠到解决方案中.如果文件被修改,请提供并缓存文件并替换缓存版本.考虑一下检查修改日期的成本非常低.您的解决方案类似于拔出网络电缆以解决网络安全问题. (3认同)
  • @ RickO'Shea这样说,但是,doniyor正确地回答了这个问题。一个单独的问题是,防止典型的缓存策略是否合理。 (2认同)

小智 8

meta标签对我没有用.我从实现过滤器或控制器的java类中设置标头.它起作用了.这是代码

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.
Run Code Online (Sandbox Code Playgroud)


小智 5

截至2018年,只有两种最可靠的方法可用

1)**<meta http-equiv="expires" content="0">**使用此meta标记,但要小心,因为一旦浏览器处理了网页,此标记就会破坏页面的所有缓存。

2)在服务器上为每个页面请求生成一个唯一的ID,并将该ID附加在HTML文档中所有文件名的末尾,并带有??唯一ID附加在每次需要从服务器加载的图片,文档,css / js文件,视频等之前。例如,如果您具有HTML标签,<img src="images/profile223.jpg" alt="profile picture">则在服务器端将唯一ID附加到文件名的末尾,如下所示echo '<img src="images/profile223.jpg?'.$uniqueid.'"" alt="profile picture">';。在此示例中,我使用php,但您可以在任何语言上生成唯一ID。所有大公司(例如Google,Facebook,Microsoft,Twitter等)都使用此技术,因为这是最有效的方法,并且不会影响您要存储在用户浏览器中的缓存数据(例如登录会话ID)。此技术与跨浏览器兼容,并支持IE,Firefox,Chrome,Safari和Opera的较早版本。 您可以使用相同的技术在网址末尾附加唯一ID

  • 但是,如果缓存了index.html,则客户端将使用旧的静态资产URL,并附加前面的?uniqueId (9认同)