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