Проблемы с IE9 и Python?

Пытаюсь отладить сайт в IE9. Я запускаю его через Python.

В хроме, сафари, фаерфоксе и опере сайт загружается сразу, но в IE9 он как бы зависает и никогда не загружается.

Может ли это быть проблемой с конвейерной передачей http? Или что-то другое? И как я могу это исправить?


person Christopher Dougherty    schedule 23.08.2012    source источник
comment
Как вы ведете свой сайт? Это происходит в продакшене или только в разработке? Какой фреймворк вы используете?   -  person thebjorn    schedule 23.08.2012
comment
Что вы имеете в виду, когда говорите, что запускаете его через Python? Вы используете python локально, чтобы открыть новый экземпляр браузера аля WATIP? Вы используете python для обслуживания страниц в браузере?   -  person chucksmash    schedule 23.08.2012
comment
Работает в разработке. Кажется, у меня нет этой проблемы в разработке. Я использую python simplehttpserver для ее запуска.   -  person Christopher Dougherty    schedule 23.08.2012


Ответы (2)


Вам нужно указать, какой «веб-сервер» Python вы используете (например, бутылка? Может быть, Tornado? CherryPy?), но, что более важно, вам нужно указать, какие заголовки запросов и какой HTTP-ответ входит и выходит, когда задействован IE9.

Вы можете снять их с проволоки, используя, например, ngrep, или, я думаю, вы можете использовать Инструменты разработчика в IE9 (клавиша F12).

Наиболее распространенные причуды IE9, которые часто не беспокоят веб-браузеры, — это несоответствия в Content-Length (ну, это ДЕЙСТВИТЕЛЬНО беспокоило Safari в прошлый раз, когда я смотрел), возможно, Content-Type (это действует в обратном порядке — IE9 иногда правильно подбирает MIME-тип HTML, даже если Content-Type неверен), Connection: Close.

Так что да, это может быть проблема с конвейерной обработкой HTTP: в частности, если вы передаете запрос с недопустимой длиной содержимого и даже без кодирования фрагментированной передачи, IE может дождаться «завершения» запроса. Это произойдет и в веб-браузерах; но тогда может случиться так, что это поведение в IE переопределяет сброс и закрытие соединения, а в веб-браузерах - нет. Эти две гипотезы могут соответствовать вашим наблюдаемым симптомам.

Чтобы исправить это, вы либо переключаетесь на кодирование передачи по частям, которое в некотором роде заменяет Content-Length, либо правильно вычисляете его значение. Как это сделать зависит от сервера.

Чтобы быстро проверить, вы можете ввести Content-Length, безусловно, слишком короткий (например, 100 байт?), чтобы увидеть, приведет ли это к зависанию IE и отображению частичной веб-страницы.

person LSerni    schedule 23.08.2012

Используйте анализатор пакетов для перехвата и регистрации пакетов между сервером и IE, а также между сервером и другим браузер. Изучите их обоих и сравните их, чтобы увидеть, что происходит.

person Roland Smith    schedule 23.08.2012