1
使用这个简单的代码片段:取返回空响应,但Network标签显示的数据
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"
,但它没有区别,不应该,这个资源应该可以访问没有它。
这是因为youtube不希望你像这样获取资源,他们不会发送CORS头,所以你不能直接获取资源到浏览器 - 如果你删除'{mode:'no-cors'}'你会看到CORS错误 - 读取什么模式no-cors **其实**意味着[here](https://developer.mozilla.org/en- US/docs/Web/API/Request/mode) –
为什么网络请求会通过?这是一个RSS提要,我不应该只能'GET'它吗? –
请求经过,因为它是控制CORS的响应标头 - 所以您必须获得响应才能知道是否为该站点启用了CORS。您可以在控制台中看到响应主体,因为在控制台中查看响应主体时没有任何安全问题,因为无论如何您都可以打开页面。它是一个RSS源的事实是无关紧要的 - youtube显然不希望浏览器正在查看其他站点直接访问其RSS资源。您需要在**您的**服务器 –