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

标签 perl http firefox

一个 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/

相关文章:

http - 验证 FORM POST 的来源以确保它来自同一服务器/应用程序

javascript - Firefox 中异常的 EventSource 错误

perl - 我应该将我的实用程序.pl 更改为实用程序.pm 模块吗?

Perl 创建 CSV 文件

regex - 无法使用正则表达式删除字符

http - Blazor WebAssembly : detect from which site the user came from

multithreading - Perl 中线程的超时

asp.net - 文件上传 : ApiController

javascript - Firefox window.controllers 已弃用。不要将其用于 UA 检测

javascript - 从浏览器重新加载按钮重新加载和从 javascript 重新加载时获得不同的浏览器行为