我不知道這個。我看了所有,似乎有很多解決方案,但他們不適合我。我有一個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