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失敗的原因?