Я в растерянности из-за этого. Я просмотрел все, и кажется, что есть много решений, но они не работают для меня. У меня есть приложение 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? (Обновление сервера было бы неудачным совпадением в этом случае.)