我正在使用Delphi 7的TWebBrowser组件。使用TWebBrowser我正在检索放置在我的服务器上的自己的HTML文件。我不希望用户容易找到HTML文件的副本。目前,通过互联网通过TWebBrowser检索的所有文件都存储在临时文件文件夹中,这是通过Microsoft的Internet Explorer>工具设置配置的。我不喜欢这个,因为它不需要火箭科学家在那里寻找下载文件的副本。
令我感到惊讶的是,尽管我的HTML文件在<HEAD></HEAD>
部分中有以下行,但文件仍存储在Temporary files文件夹中:
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" />
我注意到如果HTML文件是本地的,即在临时文件文件夹之外而不是通过互联网检索,IE / TWebBrowser不会将副本存储在临时文件文件夹中。
我想我要问的是,我的META标签是否有问题,或者这些标签对TWebBrowser如何处理远程检索文件没有影响?
任何解决方案,除了必须使用INDY HTTP组件来获取文件,然后从用户驱动器上的隐藏文件夹加载它们?
告诉浏览器不要缓存,例如使用Cache-Control: no-cache
指令,只是告诉它不要在后续请求中重用缓存数据,而是每次都必须从服务器重新请求数据。它没有说明在本地缓存文件以进行离线浏览等。
顺便说一下,我更喜欢使用Cache-Control: no-cache
HTTP头而不是在元标记中指定它,因为HTTP头被服务器和浏览器之间的代理和其他缓存机制识别并通过。
相反,请查看Cache-Control: no-store
和private
指令,它告诉Web浏览器和任何共享缓存机制(如代理)不存储数据。
但请注意,您可以帮助保护用户的数据,但是您无法保护他们自己。有一些注册表设置允许用户覆盖IE中的“no-store”指令。
也许内存解决方案会更好。
我不能评论为什么<meta>
没有生效。但我可以说TWebBrowser.Navigate()
和TWebBrowser.Navigate2()
方法都有一个Flags
参数。您可以指定navNoWriteToCache
标志以防止将检索到的数据保存到缓存中。
将NavNoReadFromCache
作为第二个参数提供给Navigate
方法。
procedure TForm1.Button1Click(Sender: TObject);
var
Flags: OLEVariant;
begin
Flags:=4; //NavNoReadFromCache
WebBrowser1.Navigate('http://www.example.com', Flags);
end;
Browser.EnableCaching:= FALSE; Browser.Navigate;