Проблема с блокировкой считывания между источниками (CORB) при создании запроса img

В настоящее время я пытаюсь реализовать это решение здесь. Решение кажется довольно простым и возможным, так как я являюсь владельцем обоих хостов. На mysite1.com я добавил следующее img тег.

<img src="//mysite1.com.com/cookie_set/" style="display:none;">

На моем site2.com (django) у меня есть такое представление:

def cookie_set(request):
    response = HttpResponse()
    response.set_cookie('my_cookie', value='awesome')
    return response

Когда я выпущу этот код в прямом эфире. Я получаю следующую ошибку:

Cross-Origin Read Blocking (CORB) blocked cross-origin response https://www.mysite2.com/cookie_set/ with MIME type text/html. See https://www.chromestatus.com/feature/121212121221 for more details.

Я подумал, что, может быть, если бы я просто добавил "Access-Control-Allow-Origin" На мой взгляд, это может исправить ситуацию, но в соответствии с документами здесь: https://www.chromium.org/Home/chromium-security/corb-for-developers, есть еще одно соображение:

Например, он заблокирует текстовый /html-ответ из разных источников, запрошенный из тега или, и заменит его пустым ответом.

Верны ли мои предположения? После добавления правильных заголовков я должен просто изменить тип содержимого на что-то другое text/html?

В конечном счете, моя последняя цель - я хочу установить cookie для другого домена, которым я управляю (в идеале без перенаправления).

1 ответ

Лучшее решение: используйте другой тег для этого. (т.е. iframe).

Смысл CORB состоит в том, чтобы предотвратить использование определенных тегов для внедрения данных XSSI. Поэтому запросы тегов img не должны возвращать типы содержимого text/html, application/json или xml.

Таким образом, если только вызов тега img не предназначен для захвата самого запроса (например, для отслеживания реферера), вы получите гораздо больше универсальности, выполнив в любом случае iframe (например, для рабочих процессов перенаправления SSO).

См. Также: Настройка сторонних файлов cookie с помощью тега 1x1 - Javascript не удаляет файлы cookie.

Я исправил это для файлов изображений, обновив Content-Type метаданные в разделе "Свойства" в S3 - image/jpeg для файлов JPEG и image/png для файлов PNG.

Мое приложение загружает файлы изображений через multer-s3 и, похоже, применимоContent-Type: 'application/x-www-form-urlencoded'. У него есть опция contentType с функцией автоматического определения типа контента - это должно предотвратить неправильные заголовки и устранить проблему CORB.

Кажется, что последнее обновление версии Chrome 76 включает прослушивание заголовков URL-адресов удаленных файлов, в частности Content-Type. CORB не был проблемой для других браузеров, таких как Firefox, Safari, и браузеров внутри приложений, например Instagram.

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