2016-11-09 1 views
1

Используя этот простой фрагмент кода:Fetch возвращает пустой ответ, но вкладка Сеть показывает данные

fetch("https://www.youtube.com/feeds/videos.xml?channel_id=UCAL3JXZSzSm8AlZyD3nQdBA", { mode: "no-cors" }) 
    .then(r => { 
    console.debug(r); 
    r.text().then(t => console.debug(t)).catch(console.error); 
    }) 
    .catch(console.error); 

я получаю пустой ответ (null тела, пустой url, status нуля, ok является false), однако, когда я иду вкладку «Сеть», я могу видеть данные на вкладке «Ответ» внутри нее. Я ожидаю ответа fetch, чтобы дать мне то же самое.

Что дает? Я попытался добавить credentials: "include", но это не повлияло и не должно, этот ресурс должен быть доступен без него.

+2

Это потому, что вы не хотите, чтобы вы получали такие ресурсы, они не отправляют заголовки CORS, поэтому вы не можете напрямую получить ресурс в браузере - если вы удалите '{mode: 'no-cors'}' вы увидите ошибку CORS - прочитайте, какой режим no-cors ** на самом деле ** означает [здесь] (https://developer.mozilla.org/en- US/docs/Web/API/Request/mode) –

+0

Почему сетевой запрос проходит? Это RSS-канал, не должен ли я просто «ПОЛУЧИТЬ» его? –

+1

запрос проходит, потому что это заголовки ответов, которые контролируют CORS, поэтому вам нужно получить ответ, чтобы узнать, разрешен ли CORS для сайта. Вы можете увидеть тело ответа в консоли, потому что нет проблем с безопасностью, когда вы видите тело ответа в консоли, так как вы можете просто открыть страницу в любом случае, правильно. Тот факт, что это RSS-канал, не имеет значения - youtube явно не хочет, чтобы браузеры просматривали другие сайты, чтобы напрямую обращаться к своим ресурсам RSS. Вам необходимо «проксировать» запрос на ** ваш ** сервер –

ответ

1

Я answerize, потому что это мне помогло :)

запрос проходит через потому, что заголовки ответа, которые управляют CORS - так что вы должны получить ответ, чтобы знать, если CORS включен для сайта.

Вы можете увидеть тело ответа в консоли, потому что нет никаких проблем с безопасностью, когда вы видите тело ответа в консоли, так как вы можете просто открыть страницу в любом случае, правильно.

Тот факт, что это RSS-канал не имеет никакого отношения - YouTube явно не хотят браузеры, которые просматривали другие сайты, прямой доступ к их RSS ресурсы. Вам нужно «проксировать» запрос на своем сервере

 Смежные вопросы

  • Нет связанных вопросов^_^