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. Но дело в том, что сервер решает, хочет ли он разрешить операции перекрестного происхождения из браузеров, и поэтому ваши два сервера предлагают различные возможности в этом отношении.

Этот конкретный API-интерфейс youtube является немного подозрительным, хотя, поскольку он существует исключительно по причинам, связанным с перекрестным происхождением, поэтому должно быть что-то еще, что препятствует его работе. Чтобы узнать больше, нужно посмотреть на трассировку сети, чтобы точно увидеть, что было отправлено на YouTube, какие заголовки CORS присутствовали и, возможно, что именно может быть причиной этого. Может быть, например, существует несоответствие http/https, и поэтому CORS не работает?