Я в растерянности из-за этого. Я просмотрел все и, кажется, есть много решений, но они не работают для меня. У меня есть приложение CGI :: Application, создающее электронную таблицу MS Excel с помощью Spreadsheet :: WriteExcel. Некоторое время это работало нормально, пока пару недель назад у нашего живого сервера не случился аппаратный сбой. Мы использовали отключение как предлог для обновления до Windows Server 2008 (с 2003 г.) и Apache 2.2.17 (с 2.2.11). Теперь я получаю спорадические (но слишком частые, чтобы игнорировать) жалобы от клиентов, получающих эту ошибку при попытке загрузить электронные таблицы:
Internet Explorer не может загрузить [url] с [site].
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? (В этом случае обновление сервера было бы неудачным совпадением.)
Vary
, так как сам никогда его не настраивал. Я предполагаю, что это делает Apache, но не могу найти где. - person wes   schedule 02.06.2011