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”确实会显示当前页面的源。再次,为什么会有区别?
谢谢。
答案 0 :(得分:2)
打印$ q-> header(-expires =>'+ 0s');
这将转换为Expires: .. current date and time ..
,这意味着响应立即过期。这意味着结果不会被缓存,因此在浏览器中返回时无法显示。
打印“到期:+ 0s \ n”;
它不会翻译,而是直接发送到浏览器,即Expires: +0s
。由于Expires
标头期望您没有提供的实际日期和时间,因此该无效标头将被忽略,而是采用默认的缓存策略。这意味着页面将被缓存,并且可以在浏览器中返回时显示。