ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

IE7 bug / force response to HTTP/1.0


  • To: nginx-ru@xxxxxxxxx
  • Subject: IE7 bug / force response to HTTP/1.0
  • From: "Andrew V. Statsenko" <alter@xxxxxxxxx>
  • Date: Mon, 21 Apr 2008 15:44:41 +0400
  • Organization: Naunet SP

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


Коллеги, очень похоже, что наступил за замечательные грабли с 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 ?), то был бы безмерно признателен за наводку.



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


 




Copyright © Lexa Software, 1996-2009.