我们的调查向我们表明,并非所有浏览器都以统一的方式尊重http缓存指令.
出于安全原因,我们不希望在我们的应用程序某些网页缓存,有史以来,通过Web浏览器.这必须至少适用于以下浏览器:
我们的要求来自安全测试.从我们的网站注销后,您可以按后退按钮查看缓存页面.
我正在为两个无偿网站编写和使用一个非常简单的基于CGI(Perl)的内容管理工具.它为网站管理员提供HTML表单,用于填写字段(日期,地点,标题,描述,链接等)的事件并保存.在该表单上,我允许管理员上传与事件相关的图像.在显示表单的HTML页面上,我还显示了上传图片的预览(HTML img标签).
当管理员想要更改图片时,会发生此问题.他只需点击"浏览"按钮,选择一张新照片然后按确定即可.这很好用.
上传图像后,我的后端CGI处理上传并正确地重新加载表单.
问题是显示的图像没有刷新.即使数据库保存正确的图像,仍会显示旧图像.我已将其缩小到图像在Web浏览器中缓存的事实.如果管理员点击Firefox /资源管理器/ Safari中的RELOAD按钮,则所有内容都会刷新,并且只会显示新图像.
我试图通过写一个过去很远的日期的HTTP Expires指令来控制缓存.
Expires: Mon, 15 Sep 2003 1:00:00 GMT
Run Code Online (Sandbox Code Playgroud)
请记住,我在管理方面,我并不关心页面是否需要更长时间才能加载,因为它们总是过期.
但是,这也不起作用.
上传图像时,其文件名不会保留在数据库中.它被重命名为Image.jpg(在使用时简单地说出来).使用新图像替换现有图像时,名称也不会更改.只是图像文件的内容发生了变化.
网络服务器由托管服务/ ISP提供.它使用Apache.
有没有办法强制Web浏览器不缓存此页面中的内容,甚至图像?
我正在使用数据库实际"保存文件名"的选项.这样,如果图像被更改,IMG标签的src也将改变.但是,这需要在整个站点进行大量更改,如果我有更好的解决方案,我宁愿不这样做.此外,如果上传的新图像具有相同的名称(例如图像有点照片并重新上传),这仍然无效.
我正在寻找一种以编程方式清空浏览器缓存的方法.我这样做是因为应用程序缓存了机密数据,我想在你"注销"时删除它们.这可以通过服务器或JavaScript发生.当然,仍然不鼓励在外国/公共计算机上使用该软件,因为有更多的危险,如关键记录器,你不能在软件级别上击败.
我正在通过XAMPP开发一个基于Wordpress源代码的网站.有时我更改CSS代码,scrips或其他东西,我注意到我的浏览器需要时间来应用修改.这导致我使用多个浏览器刷新一个,如果不应用新样式我尝试第二个,它总是这样.
有一些方法可以避免这个问题吗?有时我在更改代码而不通知以前的修改.
在Angular 2中,如何清除模板缓存?Angular 1有很多答案,但是没有2个答案.
我遇到的问题是,当我更改templateUrl任何组件引用的html页面的内容时,html页面在浏览器中不会更改,直到我手动导航到templateUrl浏览器并点击重新加载.我知道您可以在开发过程中禁用浏览器缓存来解决这个问题,但我担心的是,当我使用Angular 2更新网站时,如果用户将其缓存在浏览器中,用户可以看到过时的html页面.
以下是Angular 1 AngularJS在开发机器上禁用部分缓存的堆栈溢出问题的链接
下面是一个片段,我在app.html更改其内容时遇到更新问题.
@Component({
selector: 'photogallery-app',
templateUrl: './app/app.html',
directives: [ROUTER_DIRECTIVES, CORE_DIRECTIVES]
})
Run Code Online (Sandbox Code Playgroud) 如何通过在浏览器的地址栏中输入URL www.mydomain.com/index.htm或只需www.mydomain.com并按Enter键,强制浏览器在加载页面时始终加载最新版本的index.htm.
我正在Chrome中尝试这个,最新版本的index.htm显然只是加载,当我手动刷新(F5),或者当URL已经在浏览器的地址栏中时我按下回车键.
我想我正在做一些非常愚蠢的事情,因为当我搜索这个问题时,我所能找到的解决方案是关于如何通过将?v = xxxx附加到文件名来使浏览器重新加载.js和.css文件.但是,如果不是最新版本的index.htm页面(我正在进行这些修改),这应该如何工作?
我也尝试过
<meta http-equiv="cache-control" content="no-cache">
Run Code Online (Sandbox Code Playgroud)
在<head>index.htm中.但这似乎没有任何影响.
任何帮助将不胜感激!
谢谢,Linus
有人可以向我解释HTML 5的缓存清单与使用其他文件头技术告诉浏览器缓存文件有何不同?
我正在研究一个中等规模的Web应用程序,并尝试提出最佳解决方案,使所有浏览器都使用缓存,并且只在加载资产有更新时才使其无效.
根据我在这里和其他地方所做的研究,每个人似乎都同意将?v = {version#}附加到资产(如css或js文件)是一种在资产时自动使缓存无效的好方法已更新.(根据Force浏览器清除缓存和更好的方法来阻止JavaScript文件的浏览器缓存)
但在我看来,这个解决方案应该推广到驻留在Web服务器上的所有资产.
所以我的问题是,让构建脚本查看整个网站的每个src =""属性是一个好习惯 - 无论是img,css还是js,并以编程方式附加?= {timestamp}其中timestamp是上次修改文件的时间.这样,无论何时从开发到分段再到生产,只有那些已修改的文件才会有更改的时间戳,浏览器将知道这些文件的缓存无效.
有这种方法的任何缺陷?
注意:考虑到这一点,在稍后还原的更改的情况下,时间戳肯定是不合需要的.因此,附加?= {md5(filecontents)}是一种更强大的方法.然而,关于是否在所有资产和所有构建中实现此问题的问题仍然存在.
我偶然发现了一个非常奇怪的问题,我正在构建一个HTML模型,它在localhost的所有主流浏览器中运行良好,但是当我将它上传到服务器时,事情变得很奇怪.
当我从Chrome或Safari中的服务器加载我的网站时,标题(看起来我需要它来自localhost)会显示失真.但是当我重新加载页面时,它有可能正常显示.
两个位置的代码完全相同.服务器正在运行apache 2.2.16
当我对angularjs应用程序进行更改时,会出现一个反复出现的问题.问题是如果我想对我所做的更改进行播种,我必须刷新页面.这是一个问题,因为我不希望我的用户必须刷新页面(他们可能不知道这样做).他们可能认为该网站已被破坏.我可以遵循某种角度指令或流程,这样我的UI更改就可以反映在我的生产服务器上而无需用户刷新页面吗?