gpt4 book ai didi

perl - 哪些 http header 可以在浏览器后退按钮上抑制 "This document is no longer available."?

转载 作者:可可西里 更新时间:2023-11-01 17:04:28 26 4
gpt4 key购买 nike

一个 perl 脚本使用这个 URL 创建一个下载页面

http://server/cgi-bin/oursite/script.pl?action=checkme&username=myname

标题设置为:

my $q = new CGI;
...
print $q->header(-expires => '+0s');

上面有一堆链接。这是一个:

http://server/cgi-bin/oursite/script.pl?username=myname&action=retrieve&rmime=text__plain&rfile=HM_vmK9Ah.status

(这是 文件名 构造中的 URL。)如果用户单击此链接,目标文件将连同 header 发送到浏览器:

  print "Content-type: $RMIME\n";
print "Content-Disposition: inline\n\n";

后跟该文件的文本。它应该显示。不幸的是,如果用户随后尝试使用浏览器的后退箭头,则会失败。 Firefox(例如)这样说:

文件已过期

This document is no longer available.

The requested document is not available in the browser’s cache.

As a security precaution, the browser does not automatically re-request sensitive documents.
Click Try Again to re-request the document from the website.
[Try Again]

点击浏览器中的“重新加载”按钮或消息中的“再试一次”,然后“重新发送”返回下载页面。

如果下载页面的 header 由以下方式生成:

print "Expires: +0s\n";
print "Content-type: text/html\n\n";

然后“后退”按钮按预期工作。

我不明白为什么这两种情况下的行为不同,因为除了“后退”按钮失败之外,页面显示相同(如文本/html)。有人可以解释一下吗?

一个相关的问题 - 如果浏览器被告知在使用第一个 header 方法创建的下载页面上“显示页面源”,该方法也会显示“文档已过期”消息,并且“重试”“重新发送”会显示 URL脚本提供的首页。但是首页上的“显示页面源代码”会立即显示它,而不会显示“文档已过期”消息。如果页面是用第二种标题方法创建的,那么“显示页面源代码”确实会显示当前页面的源代码。再一次,为什么不同?

谢谢。

最佳答案

print $q->header(-expires => '+0s');

这被翻译成 Expires: .. current date and time .. 这意味着响应立即过期。这意味着结果不会被缓存,因此在浏览器中返回时无法显示。

print "Expires: +0s\n";

这不会被翻译,而是按原样发送到浏览器,即:Expires: +0s。由于 Expires header 需要您未提供的实际日期和时间,因此该无效 header 将被忽略,并应用默认缓存策略。这意味着页面会被缓存并在浏览器中返回时可以显示。

关于perl - 哪些 http header 可以在浏览器后退按钮上抑制 "This document is no longer available."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56674097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com