Fetch API загружает изображение с другого веб-сайта, но ответ не получается и данные не поступают.Зачем? - PullRequest
0 голосов
/ 09 апреля 2019

Когда я получаю изображение с этим утверждением в консоли

r = await fetch("http://web.mit.edu/files/images/201903/MIT-Melt-Electrowriting.jpg", {mode: "no-cors"})

Я вижу, что данные изображения загружаются в Fiddler (инструмент сниффинга), браузер показывает 200 ответ на сетевой панели, но нет данных, доступных для этого запроса. Ответ в консоли js показывает:

Response {type: "opaque", url: "", redirected: false, status: 0, ok: false, …}
    body: (...)
    bodyUsed: false
    headers: Headers {}
    ok: false <<<<<<<<<<<<<<<<<<<<<<<<<
    redirected: false
    status: 0
    statusText: ""
    type: "opaque"
    url: ""
__proto__: Response
}

Почему данные изображения не поступают?

(добавление .then (r => r.blob ()) дает пустой блоб)

1 Ответ

2 голосов
/ 09 апреля 2019

По умолчанию fetch использует режим CORS.Но когда ответ сервера не содержит заголовок «Access-Control-Allow-Origin».Он пропускает тело ответа.

По иронии судьбы, вы должны установить режим «no-cors» для запроса непрозрачных ресурсов.Непрозрачные ответы не могут быть доступны с помощью JavaScript, но ответ по-прежнему может обслуживать или кэшировать работник службы.

https://developers.google.com/web/ilt/pwa/working-with-the-fetch-api

...