为什么浏览器会阻止特定的 Ajax 请求?

Why do browser blocks specific Ajax requests?

我有两个代码片段:

$.getJSON("https://noembed.com/embed", {"format": "json", "url": input.val()}, function (data) {
// work with data
});

第二个:

$.getJSON("https://www.youtube.com/oembed", {"format": "json", "url": input.val()}, function (data) {
// work with data
});

第一个会成功,第二个不会。它们都是从 http://localhost:8080/myapp/page 发送的。为什么同源策略不允许两个请求? (其实是浏览器的问题)

有些服务器允许浏览器进行跨源请求,有些则不允许。参见 CORS

可能涉及多个 CORS headers,因此存在 none 个,或者 YouTube 缺少此特定操作所需的内容。但是,关键是服务器决定是否要允许来自浏览器的跨源操作,因此您的两个服务器在这方面提供不同的功能。

虽然这个特定的 youtube API 有点可疑,因为它的存在纯粹是出于 cross-origin 的原因,所以一定有其他原因阻止它工作。要了解更多信息,必须查看网络跟踪以准确了解发送到 youtube 的内容、存在的 CORS headers 以及可能导致此问题的确切原因。例如,是否存在 http/https 不匹配,这就是 CORS 失败的原因?