2016-03-29 7 views
75

Я пытался fetch в адрес старого сайта, и ошибка произошла:Что такое непрозрачный запрос и для чего он служит?

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's mode to 'no-cors' 
to fetch the resource with CORS disabled. 

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

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

Ok, теперь он работает ... но я не могу это прочитать. = \

Какая цель тогда непрозрачного запроса?

ответ

69

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

Именно поэтому { mode: 'no-cors' } был сделан для.

46

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

0

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

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

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