Странные заголовки ответа HTTP отправляются только в Internet Explorer 8 - PullRequest
0 голосов
/ 09 апреля 2011

Итак, вот что я нахожу загадочным.

Я работаю над Javascript, который должен анализировать данные XML, и я использую $ .ajax jQuery для получения и анализа данных. Он отлично работает везде, кроме случаев, когда я тестирую с Internet Explorer 8 (это может быть проблемой на 7 и 9 тоже). В IE я получаю ошибки разбора. Я установил console.log для проверки заголовков HTTP. Вот что я получаю от Chrome на Windows XP и что я получаю от IE -

Chrome:

Date: Sat, 09 Apr 2011 16:06:24 GMT
Connection: Keep-Alive
Content-Length: 2283
Last-Modified: Sat, 09 Apr 2011 15:59:12 GMT
Server: Apache/2.2.14 (Ubuntu)
ETag: "48048-8eb-4a07e6c693400"
Content-Type: application/xml
Accept-Ranges: bytes
Keep-Alive: timeout=15, max=97

IE8:

LOG: ETag: "48048-8eb-4a07d7a3cbe40"
Keep-Alive: timeout=15, max=97
Content-Type: text/html
Content-Length: 2283
Last-Modified: Sat, 09 Apr 2011 14:51:29 GMT

Вот как выглядит XML-документ:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <tweet>
        <name>name</name>
        <message>message</message>
        <avatar>avatar</avatar>
    </tweet>
    <tweet>
        <name>name</name>
        <message>message</message>
        <avatar>avatar</avatar>
    </tweet>
</root>

Я проверил настройку MIME для моего сервера Apache, и он настроен на отправку файлов xml в виде «application / xml». Поэтому странно отправлять контентный тип application / xml в Chrome, но IE получает контентный тип text / html.

Итак, я построил простой PHP-скрипт:

<?php
header('Content-type: application/xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-8" ?>';
?>
<root>
    <tweet>
        <name>name</name>
        <message>message</message>
        <avatar>avatar</avatar>
    </tweet>
    <tweet>
        <name>name</name>
        <message>message</message>
        <avatar>avatar</avatar>
    </tweet>
</root>

Когда я изменяю Javascript для получения PHP вместо XML-файла, я получаю эти заголовки ответа -

Chrome с PHP:

Date: Sat, 09 Apr 2011 16:10:39 GMT
X-Powered-By: PHP/5.2.10-2ubuntu6.7
Connection: Keep-Alive
Content-Length: 2102
Server: Apache/2.2.14 (Ubuntu)
Content-Type: application/xml; charset=UTF-8
Keep-Alive: timeout=15, max=97

IE с PHP:

LOG: X-Powered-By: PHP/5.2.10-2ubuntu6.7
Content-Length: 2102
Keep-Alive: timeout=15, max=100
Content-Type: application/xml; charset=UTF-8

Итак, насколько я могу судить, с моим ограниченным знанием Apache кажется, что необработанный XML-файл отправляется без нужного типа контента только в IE, даже если я настроил его для отправки 'application / xml'. Chrome получает правильный тип контента. Когда я использую PHP, Apache, похоже, следует моим пожеланиям и отправляет «application / xml», потому что это то, что я пометил, как в сценарии. Также странно, что в IE нет тех же заголовков, что и в Chrome? «Сервер» отсутствует, например.

Так что же может помешать и изменить 'application / xml' на 'text / html' только для Internet Explorer? Я бы не хотел полагаться на PHP-скрипт для вывода моих XML-данных. Я думал о mod-deflate, но отключил его, и результаты те же.

Есть идеи?

(PS - включаемый мной XML - просто пример, поэтому длины содержимого не совпадают)

Ответы [ 2 ]

1 голос
/ 09 апреля 2011

Так что, думаю, я понял это.

Похоже, что IE кэширует данные AJAX GET таким образом, что их трудно (невозможно?) Очистить. Может быть, в какой-то момент я настроил xml как text / xml, но я так не думаю. По сути, IE продолжал использовать кэшированные результаты для этого XML-файла поверх фактических результатов сервера. Это также объясняет, почему заголовки HTTP выглядели так странно (например, никакой информации о сервере). Или, возможно, кеш всегда производит text / html (я отказался от дальнейших тестов).

Мое решение: Я добавил в конце URL-адреса запрос «GET»: «avocache =» + метку времени. Теперь IE получает правильные заголовки HTTP, которые я установил на сервере.

Да, я ненавижу Internet Explorer. Сколько часов разработки потрачено впустую, создавая обходные пути для его ужасного поведения?

0 голосов
/ 09 апреля 2011

IE может отправлять другой HTTP-запрос, запрашивая в первую очередь text / html или только и chrome с другой стороны application / xml. Вы проверяли заголовки HTTP-запроса?

Кроме того, как вы проверяли HTTP-пакеты? Может быть, IE сбрасывает тег сервера? (Что в большинстве случаев довольно бесполезно.)

Когда вы тестировали с PHP, устанавливали тип контента и он работал, это настройка веб-сервера и / или разница HTTP-запросов. Проверьте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...