2017-02-18 21 views
1

Я делаю запрос-выборку из домена A на изображение в домене B. Я установил правильные заголовки в домене B (Access-Control-Allow-Origin: *)Javascript CORS fetch response.status = 0

Теперь, если я проверить ответ-статус (response.status) я всегда получаю статус 0. Однако, если я проверить в хромовом отладчика я могу видеть изображение было получено со статусом 200.

.

Мой бланк предназначен для того, чтобы решить, использовать или не кэшировать ресурс на основе кода состояния. Поскольку домен B содержит только статические ресурсы, и кеш должен быть постоянным, я считаю, что лучше не кэшировать (пока), если код состояния неверен.

Кто-нибудь знает, почему я получаю такое поведение?

Edit:

  • Оба домены HTTPS
  • Это фрагмент кода:

    fetch(e.request).then(function(response){ 
    console.log(e.request.url+' - '+response.status); 
    } 
    
+0

«Однако, если я зарегистрирую хром-отладчик, я вижу, что изображение было получено с статусом 200' - вы также можете увидеть заголовок ответа CORS? статус 0 обычно означает, что вопрос CORS –

+0

был действительно доступен, спасибо – jrnv

ответ

0

Хорошо, я нашел ответ сам, я боролся с этим уже в течение нескольких часов.

e.request был получен от serviceworker, и кажется, что режим запроса по умолчанию установлен на «навигацию». Это должно быть «Корс»

Я создал новый запрос, как это:

var request = new Request(e.request.url, { 
    method: e.request.method, 
    headers: e.request.headers, 
    mode: 'cors', 
    redirect: 'manual'}); 

Это кажется мне странным, что CORS-контент допускается без Корса-режим, но СТАТУС код изменен, тем не менее.

Если кто-то знает, что может быть причиной этого?