Почему при загрузке через HTTPS я получаю "ошибку безопасности" от plupload на IE8/IE9?

Я использую plupload для загрузки файлов в службу ASP.NET WebAPI. Он отлично работает в Chrome и отлично работает в IE8/IE9 на моей машине для разработки. Однако когда я подключаюсь к веб-сайту на реальном сервере, загрузка файла приводит к срабатыванию обработчика ошибок plupload с кодом ошибки -400 и сообщением об ошибке "Ошибка безопасности".

Глядя на заголовки ответа и запроса, все выглядит нормально. Ответ даже содержит правильное возвращаемое значение! Я предполагаю, что это как-то связано с использованием https, но я не уверен, и это работает правильно в Chrome. (Firefox имеет совершенно другую проблему, но, по-видимому, возвращает данные в отличие от IE.)

Мне интересно, это как-то связано с заголовком Accept запроса, который:

Accept  application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*

Content-Type заголовка ответа имеет вид text/html, поскольку application/json заставляет IE хотеть сохранить ответ, а не передавать его обратно в сценарий.

Так что же это за "ошибка безопасности" и почему я ее получаю? Что еще более важно, почему я получаю это, хотя ответ, кажется, возвращается правильно? Еще важнее, как мне это исправить?

РЕДАКТИРОВАТЬ: ОК, так что больше информации. По-видимому, IE9 использует среду выполнения html4 для plupload, которая использует iframe для обработки загрузки файла. Когда данные возвращаются и он пытается получить доступ к HTMLIFrameElement, IE9 выдает ошибку "Доступ запрещен". Я понимаю, что это помогает предотвратить ошибки xss, НО похоже, что чтение из iframe должно быть безопасным...

Так кто-нибудь знает способ обойти это?

1 ответ

Решение

Оказывается, что и IE8, и IE9 используют среду выполнения plugin для HTML4, а не среду HTML5. Работоспособность HTML4 работает путем рендеринга скрытого iframe для обработки загрузки. Проблема в том, что IE8/9 запрещает доступ к этому iframe, чтобы предотвратить атаки XSS, поэтому, когда plupload пытается прочитать результат загрузки, мы получаем эту ошибку безопасности.

Решение заключается в том, чтобы веб-сервис был доступен по тому же URL-адресу, что и вызывающая его страница. В моем случае я только что настроил виртуальное приложение в IIS, которое указывает на сайт веб-служб (которые находятся на одном и том же сервере, но я думаю, что оно также может работать с двумя разными серверами).

Создание виртуального приложения на том же сайте позволяет вам ссылаться на URL основного сайта, в то же время получая контент с дополнительного сайта.

Другие вопросы по тегам