перекрестный заголовок в IE8 / IE9 - PullRequest
18 голосов
/ 11 марта 2012

Поскольку jQuery ajax не работает для CORS / IE, я использую XDomainRequest для получения данных с другого Сервера. Работа в порядке, но я хотел бы отправить какой-нибудь заголовок («Аутентификация», «тип контента»).

Есть ли возможность добавить / изменить заголовок в XDomainRequest?

Или кто-то знает обходной путь?

Ответы [ 2 ]

17 голосов
/ 13 марта 2012

Это то, что мы сделали для IE.

Если у вас есть контроль над целевым доменом, разместите там (статический) html-файл. Включите HTML, используя iframe.

Теперь этот iframe действительно имеет доступ к локальному домену, поэтому вы можете общаться между родительским и дочерним фреймами, чтобы получить то, что вам нужно.

Это сработало намного лучше, чем XDomainRequest для нас.

window.postMessage - лучший способ установить связь:

Но я почти уверен, что начал работать только с IE8. Если вам также требуются более старые браузеры, вы должны использовать другой хак.

В нашем случае это была наша трехслойная система:

  1. CORS, для браузеров, которые его поддерживают
  2. iframe & window.postMessage как основной запасной вариант
  3. Скрипт прокси на стороне сервера в качестве вторичного запасного варианта

Все эти опции работают хорошо, надежны и не слишком похожи на взлом. Вторичный запасной вариант почти не использовался.

Имейте в виду, что заголовок «Аутентификация» является особенным, и я не удивлюсь, если он заблокирован при определенных обстоятельствах. Мы добавили пользовательский заголовок «X-Authenticate», так как он все время проходил.

2 голосов
/ 12 марта 2012

IE XDomainRequest не позволяет устанавливать пользовательские заголовки. См. Пункт № 3 здесь: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx Объект XDomainRequest заблокирован до такой степени, что трудно выполнить аутентифицированные запросы.

...