Я разработал расширения Google Chrome, в которых используется API данных YouTube v2. Мое поле разрешений в манифесте выглядит так, потому что script вводится на страницах под youtube.com, и мне также нужен доступ к вкладкам:
"permissions": ["tabs", "*://*.youtube.com/*"]
Это также работает, когда я делаю запрос к API данных YouTube v2, потому что запрос выполняется http://gdata.youtube.com/, так что это тот же домен. Но теперь я перехожу к API данных YouTube v3, и запросы должны быть выполнены в http://www.googleapis.com/youtube/v3/ (примечание HTTPS вместо HTTP). Однако, как ни удивительно, мои запросы работают отлично, не добавляя никаких новых разрешений.
Я знаю, я задаю вопрос, который не кажется проблемой, но лично я считаю любое поведение, которое я не понимаю в своем программном обеспечении. Почему это происходит? Я не должен добавлять разрешение, например "*://*.googleapis.com/*"
, чтобы мои запросы XMLHttpRequest к API работали?
У меня также есть некоторый король предположения: заголовки HTTP Access Control. Мои запросы отправляют заголовок Origin
со значением chrome-extension://myExtensionId
. И ответ API также содержит следующий заголовок:
Access-Control-Allow-Origin: chrome-extension://myExtensionId
Но может ли это быть причиной того, что Chrome позволяет мне выполнять XMLHttpRequest с перекрестным происхождением без какого-либо дополнительного разрешения, определенного в манифесте? Не уверен, и, по-видимому, это не документировано нигде в API Google API, документации по API-интерфейсам данных YouTube версии 3 или расширении Chrome.