Что такое непрозрачный ответ и какой цели он служит?

Я попытался fetch URL старого сайта, и произошла ошибка:

Fetch API cannot load http://xyz.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://abc' is therefore not allowed access.
If an opaque response serves your needs, set the request mode to 'no-cors'
to fetch the resource with CORS disabled.

Я понял сообщение и попытался сделать запрос, который возвращает непрозрачный ответ:

fetch("http://xyz", {'mode': 'no-cors'})

Хорошо, теперь это работает... но я не могу это прочитать. знак равно

Какова же цель непрозрачного ответа?

Ответ 1

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

Для этого и создан { mode: 'no-cors' }.

Ответ 2

Непрозрачные ответы не могут быть доступны с помощью JavaScript, но вы все равно можете кэшировать их с помощью API кеша и отвечать на них в fetch обработчик событий в службе. Поэтому они полезны для автономного использования вашего приложения, а также для ресурсов, которые вы не можете контролировать (например, ресурсы на CDN, которые не устанавливают заголовки CORS).

Ответ 3

Также существует решение для приложения Node JS. CORS Anywhere - это прокси-сервер NodeJS, который добавляет заголовки CORS к прокси-запросу.

URL-адрес прокси буквально берется с пути, проверяется и прокси. Часть протокола проксированного URI является необязательной, и по умолчанию используется "http". Если указан порт 443, по умолчанию по умолчанию используется протокол "https".

Этот пакет не устанавливает ограничений на методы или заголовки http, кроме файлов cookie. Запрос учетных данных пользователя запрещен. Приложение может быть настроено так, чтобы требовать заголовок для проксирования запроса, например, чтобы избежать прямого посещения браузера. https://robwu.nl/cors-anywhere.html