IE7 bug / force response to HTTP/1.0

Andrew V. Statsenko alter at naunet.ru
Mon Apr 21 15:44:41 MSD 2008


Приветствую!


Коллеги, очень похоже, что наступил за замечательные грабли с MS IE7, а
именно:

есть схема: 

[Browser]-->[Nginx frontend]-->[Apache backend]

Иногда, для отчетов apache должен отдавать "Content-Type:
application/vnd.ms-excel" и далее динамически формируемые CSV данные для
клиента. Если apache отдает Transfer-Encoding: chunked , то IE7
предлагает диалог этот файл открыть или сохранить, но при любом выборе
"загрузить" этот отчет не может, ругаясь на что-то в духе "узел сети не
может быть найден".

Firefix & Opera успешно работают, ответы (проверено через tcpdump &
ngrep) все браузеры получают одинаковые.

Проблема на backend решается через форсирование ответа в HTTP/1.0
примерно такой конструкцией в apache:

SetEnvIf Request_URI exporter nokeepalive downgrade-1.0
force-response-1.0

и этом случае при обращении IE7 напрямую на backend все работает
(т.е. убираем Transfer-Encoding: chunked), но при обращении на
frontend IE7 опять ломается (на сей раз по всей видимости из-за
отсутствия Content-Length).

Вопросы:

1. Возможно ли сконфигурировать nginx, так, чтобы по некоторым localtion
он форсировал HTTP/1.0 ? То есть _теоретически_ примерно так:

location / 
{
     force_response_to_1_0;

     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Host $http_host;
     proxy_pass http://some.backend.host;

}


2. Если (1) невозможно/сложно , то есть ли возможность добавить
хидер Content-Length непосредственно на frontend'е - вычислить эту
длину самим nginx'ом и вставить хидер ?

3. Любые другие варианты решения ?


P.S.
Разломать схему frontend-backend не могу. Слишком будет хлопотно.
Чтобы вычислять  Content-Length на backend, потребуется _сильно_
перепиливать генератор отчетов, что _очень_ не хочется делать.

P.S.S.
По поводу продукции компании MS испытываю массу разнообразнейших эмоций,
но если кто-нибудь знает, о том, что эту багу можно вылечить на стороне
браузера (патч, update ?), то был бы безмерно признателен за наводку.



 
---
С уважением,
Андрей Стаценко


More information about the nginx-ru mailing list