如何防止TWebBrowser在缓存中保留页面副本?

问题描述 投票:1回答:4

我正在使用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组件来获取文件,然后从用户驱动器上的隐藏文件夹加载它们?

delphi browser-cache twebbrowser
4个回答
0
投票

告诉浏览器不要缓存,例如使用Cache-Control: no-cache指令,只是告诉它不要在后续请求中重用缓存数据,而是每次都必须从服务器重新请求数据。它没有说明在本地缓存文件以进行离线浏览等。

顺便说一下,我更喜欢使用Cache-Control: no-cache HTTP头而不是在元标记中指定它,因为HTTP头被服务器和浏览器之间的代理和其他缓存机制识别并通过。

相反,请查看Cache-Control: no-storeprivate指令,它告诉Web浏览器和任何共享缓存机制(如代理)不存储数据。

但请注意,您可以帮助保护用户的数据,但是您无法保护他们自己。有一些注册表设置允许用户覆盖IE中的“no-store”指令。

也许内存解决方案会更好。


0
投票

我不能评论为什么<meta>没有生效。但我可以说TWebBrowser.Navigate()TWebBrowser.Navigate2()方法都有一个Flags参数。您可以指定navNoWriteToCache标志以防止将检索到的数据保存到缓存中。


0
投票

NavNoReadFromCache作为第二个参数提供给Navigate方法。

procedure TForm1.Button1Click(Sender: TObject);
var
  Flags: OLEVariant;

begin
  Flags:=4; //NavNoReadFromCache
  WebBrowser1.Navigate('http://www.example.com', Flags);
end;

-1
投票

Browser.EnableCaching:= FALSE; Browser.Navigate;

© www.soinside.com 2019 - 2024. All rights reserved.