Проблема с блокировкой считывания между источниками (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.