Браузеры Microsoft не публикуют форму в iframe, когда URL-адрес действия является перекрестным источником - PullRequest
0 голосов
/ 03 мая 2018

У меня есть веб-сайт, который экспортирует отчеты в различные форматы файлов, публикуя форму с целью в iframe, а ответ http представляет собой загружаемый файл.

В прошлом мой веб-сервер и ресурсы html / js размещались вместе в одном домене, и все браузеры работали нормально.

Я только что переместил свои статические активы в cdn в другом домене и разрешил этот домен на моем веб-сайте, используя access-control-allow-origin, x-frame-options allow-from и content-security-policy frame-ancestors. Экспорт отчетов прекрасно работает в Chrome и Firefox, но больше не работает ни в браузерах Microsoft Edge, ни в IE.

В Edge трассировка сети средств разработчика показывает, что POST для сервера является «Ожидание» и никогда не завершается, хотя серверный журнал запроса отсутствует. В IE HTTP POST работает нормально, но браузер не предлагает сохранить файл. В обоих браузерах инструменты разработчика показывают, что отсутствует HTTP-заголовок Origin, что крайне важно для настройки ответа x-frame-options. Это может объяснить, почему IE отказался сохранить файл. Но Edge даже не отправляет запрос.

Мои вопросы:

  1. Почему бы не передать HTTP POST?
  2. Почему ни один браузер не отправляет заголовок HTTP Origin? Я должен полагаться на заголовок Referer?

1 Ответ

0 голосов
/ 07 мая 2018

В итоге я пришел к выводу, что подход отправки формы в iframe для загрузки файла устарел и, вероятно, будет не полностью поддерживаться браузерами, особенно в сценарии cors. Вместо этого я думаю, что использование html5-файлов api может быть более современным подходом, как описано здесь: https://stackoverflow.com/a/23797348/1237919

Действительно, я попробовал этот подход, и он прекрасно работает во всех браузерах!

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