Почему запросы iframe не отправляют файлы cookie?

Отдел одного брата создал файл HTML, который фактически является основой для нескольких iframes. Каждый iframes вызывает отчет, размещенный на веб-сервере, с немного отличающимися параметрами. В вызываемом отчете будет показана форма входа для неаутентифицированных пользователей или содержимое отчета для уже аутентифицированных пользователей.

scaffold.html:

<html>
   <head>
      <title>I just show the output from a bunch of report calls</title>
   </head>
   <body>
      <iframe src="https://somesite.com/useful_report.html?parameter1=a&parameter2=1" id="iframe1"></iframe>
      <iframe src="https://somesite.com/useful_report.html?parameter1=b&parameter2=2" id="iframe2"></iframe>
      <iframe src="https://somesite.com/useful_report.html?parameter1=c&parameter2=3" id="iframe3"></iframe>
      <iframe src="https://somesite.com/useful_report.html?parameter1=d&parameter2=4" id="iframe4"></iframe>
   </body>
</html>

Организация-брат объяснила нам, что, если пользователь вошел в https://somesite.com, вышеуказанная установка работала отлично - каждый из iframes отображал бы текст полезного_репорта .html... до нескольких дней назад.

Когда я

  1. войдите в https://somesite.com, затем
  2. загрузить файл:///C: /Users/me/Desktop/scaffold.html в Chrome

каждый из фреймов возвращает знак https://somesite.com в форме. Если затем открыть полезный_репорт .html на отдельной вкладке, содержимое отчета загрузится (доказывая, что somesite.com знает, что я все еще подписан на ‡).

Используя инструменты разработчика, я вижу, что заголовки запроса к полезным_report.html не включают атрибут "Cookie:", поэтому это объясняет, почему полезный_порт .html возвращает форму для входа.

У меня вопрос , почему запросы iframe не отправляют файлы cookie? Какие настройки Chrome и/или сервера/директива/директива запрещают?

‡ - и теперь он знает, что я знаю, что он знает.

Ответ 1

Если вы хотите использовать нативный ajax или jquery ajax, то удалите async: false. это сработало для меня.

Для дальнейшей совместимости со старыми браузерами я рекомендую использовать http://easyxdm.net/wp/. Подход EasyXDM заключается в использовании хакера iframe, который требует, чтобы вы поместили html файл на хост, к которому вы делаете вызовы ajax. И это будет принудительно асинхронно, да. Но что хорошо с этим easyXDM, так это то, что вам не придется беспокоиться о заголовках cors.

Ответ 2

Это связано с тем, что политика использования файлов cookie SameSite Chrome defaults to Lax по умолчанию означает, что файлы cookie не будут отправляться, пока пользователь не увидит URL, который исключает фреймы.

Если вы являетесь владельцем сайта somesite.com, вы можете отказаться от этой политики, установив для политики SameSite значение "Нет", и справиться с риском атак CSRF, выполнив двойную отправку файла cookie.