Я не понимаю этого. Я смотрел повсюду, и, похоже, было много решений, но они не работают для меня. У меня есть приложение CGI:: Application, создающее электронную таблицу MS Excel со Spreadsheet:: WriteExcel. Это работало отлично в течение довольно долгого времени, пока наш живой сервер не имел аппаратного сбоя пару недель назад. Мы использовали отладку в качестве предлога для обновления до Windows Server 2008 (с 2003 года) и Apache 2.2.17 (с версии 2.2.11). Теперь я получаю спорадические (но слишком часто игнорируемые) жалобы от клиентов, получающих эту ошибку при попытке загрузить электронные таблицы:
Internet Explorer не может загрузить [url] с [сайта].
Internet Explorer не смог открыть этот интернет-сайт. Запрошенный сайт либо недоступен, либо не может быть найден. Повторите попытку позже.
Я пробовал IE 7-8 на XP, Vista и 7 и не смог воспроизвести эту ошибку локально. У пользователей, у которых есть проблема, есть это каждый раз, а не случайным образом. Все жалобы поступают от пользователей 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
Текущее обходное решение, которое мы предоставляем клиентам (неспособным или не желающим переключиться на альтернативный браузер), связано с тем, что нужно переключиться на SSL, набрав сами https
. Загрузка SSL отлично подходит для тех, кто попробовал это и вернулся к нам. Спекуляция: Может ли это быть прокси-сервером вниз по потоку с нашими заголовками? Может быть, поэтому он работает в SSL и ошибках в простом HTTP? (Обновление сервера было бы неудачным совпадением в этом случае.)