禁止显示哪个http标头“此文档不再可用。”在浏览器的后退按钮上?

时间:2019-06-19 18:48:42

标签: 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。) 如果用户单击此链接,则目标文件将发送到带有标题的浏览器:

  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]

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

如果下载页面的标题是由以下人员生成的:

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

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

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

一个相关问题-如果告诉浏览器在使用第一个标头方法创建的下载页面上“显示页面源”,并且还会弹出“文档已过期”消息,并且“再试一次”“重新发送”显示URL脚本提供的首页的大小。但是,首页上的“显示页面来源”会立即显示它,而不会显示“文档已过期”消息。如果使用第二个标题方法创建了一个页面,则“ show page source”确实会显示当前页面的源。再次,为什么会有区别?

谢谢。

1 个答案:

答案 0 :(得分:2)

  

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

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

  

打印“到期:+ 0s \ n”;

它不会翻译,而是直接发送到浏览器,即Expires: +0s。由于Expires标头期望您没有提供的实际日期和时间,因此该无效标头将被忽略,而是采用默认的缓存策略。这意味着页面将被缓存,并且可以在浏览器中返回时显示。