0

我有两个代码片段:为什么浏览器阻止特定的Ajax请求?

$.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发送。为什么相同的原产地政策不允许这两项要求? (其实这是关于浏览器的问题)。

+1

跨源资源共享 –

+1

某些服务器允许浏览器执行跨源请求,有些则不允许。请参阅[CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)。 – jfriend00

+0

@ jfriend00所以不同之处在于youtube不包含Access-Control-Allow-Origin头文件? – marknorkin

回答

1

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

可能涉及多个CORS标头,因此无论是否存在这些标头,或者从YouTube中缺少此特定操作所需的东西。但重点是服务器决定是否允许来自浏览器的跨源操作,因此您的两台服务器在这方面提供了不同的功能。

这个特殊的youtube API有一点值得怀疑,因为它纯粹是为了交叉原因而存在,所以必须有其他的事情阻止它正常工作。要了解更多信息,您必须查看网络跟踪,以确切了解发送给YouTube的内容,CORS标头存在的内容以及可能导致此问题的原因。例如,可能会有http/https不匹配,这就是CORS失败的原因?