我不知道这个。我看了所有,似乎有很多解决方案,但他们不适合我。我有一个CGI :: Application应用程序生成一个MS Excel电子表格和Spreadsheet :: WriteExcel。这很好的工作了很长时间,直到我们的服务器在几周前发生了硬件故障。我们以停机为借口升级到Windows Server 2008(从2003年)和Apache 2.2.17(从2.2.11开始)。现在,我在尝试下载电子表格时收到发生此错误的客户的投诉,但零星(但太频繁而无法忽略):文件下载结果“IE无法打开这个网站”
Internet Explorer无法从[site]下载[url]。
Internet Explorer无法打开此Internet站点。请求的网站不可用或无法找到。请稍后再试。
我已经尝试过XP,Vista和7的IE 7-8,并且无法在本地重现此错误。有问题的用户每次都有,而不是随机的。所有投诉都来自IE用户,主要是IE8。
在阅读了关于错误消息的几篇文章后,我添加了-expires
头文件无济于事。 (有没有办法直接测试这个,我不得不实施修复,并等待一天左右,看的人停止抱怨._.
)
sub export_spreadsheet {
my $self = shift;
binmode STDOUT;
my $str;
open my $fh, '>', \$str;
my $workbook = Spreadsheet::WriteExcel->new($fh);
# words words words
$workbook->close;
close $fh;
$self->header_add(-type => 'application/vnd.ms-excel',
-expires => '+1d',
-attachment => 'export.xls');
return $str;
}
该请求的头看起来正常。这些是在我的本地机器上收集的,介意你。
HTTP/1.1 200 OK
Date: Tue, 31 May 2011 22:23:17 GMT
Server: Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o mod_perl/2.0.4-dev Perl/v5.10.1
Expires: Wed, 01 Jun 2011 22:23:18 GMT
Content-Disposition: attachment; filename="export.xls"
Vary: Accept-Encoding
Keep-Alive: timeout=5, max=100
Content-Type: application/vnd.ms-excel
Content-Length: 18944
Accept-Ranges: none
Proxy-Connection: Keep-Alive
我们给客户(不能或者不愿意改用其他浏览器),目前的解决方法这个问题是通过将键入https
自己切换到SSL。 SSL下载适用于那些尝试过并返回给我们的人。猜测:它可能是一个下游代理搞乱了我们的头文件吗?这可能是为什么它在SSL中工作,并在纯HTTP中的错误? (在这种情况下,服务器升级将是一个不幸的巧合。)
你有没有试过Fiddler在两个方向上检查你的标题?另外,你在其他浏览器中遇到什么错误?我经常发现Firefox或Chrome可以给你一个更详细的错误信息,修复IE不会告诉你的问题! – 2011-05-31 23:41:43
这些标题来自Fiddler。伟大的小工具。 Firefox和Chrome没有问题,并且有问题的用户在其他浏览器中没有。 – wes 2011-05-31 23:58:51
您可能不应该发送VARY标头,因为这在您的方案中没有任何用处,并且会阻止某些IE版本(例如IE8)缓存文件。这反过来可以中断下载,参见例如http://blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no-cache.aspx – EricLaw 2011-06-01 03:30:55