При переносе веб-приложения, использующего Google API, с одного сервера на другой столкнулись с тем, что часть контента, выводящегося при помощи этого API, не выводится. В нашем случае ключ API был привязана к IP-адресам серверов, на которых работало приложение. Поэтому первым делом проверили доступы ключа, но все оказалось нормально, доступ для адреса нового сервера был открыт.
Далее я решил проверить запрос с помощью CURL:
# curl -i -G -d «regionCode=US&part=snippet&key=<Мой-Ключ-API>» https://www.googleapis.com/youtube/v3/videoCategories
На этот запрос Google ответил ошибкой HTTP/1.1 403 Forbidden:
{
«error»: {
«errors»: [
{
«domain»: «usageLimits»,
«reason»: «ipRefererBlocked»,
«message»: «The calling IP address xxx.yyy.zzz.xxx does not match the IP restrictions configured on the API key. Please use the API Console to update your key restrictions.»,
«extendedHelp»: «https://console.developers.google.com/apis/credentials?project=xxxxxxxxxxxx»
}
],
«code»: 403,
«message»: «The calling IP address xxx.yyy.zzz.xxx does not match the IP restrictions configured on the API key. Please use the API Console to update your key restrictions.»
}
}
Я удивился, поскольку в ответе говорится, что доступ к ключу для указанного IP-адреса не открыт, но я только что его перепроверял в консоли Google, и видел, что доступ есть.
После нескольких безуспешных повторных попыток запрещать/разрешать доступ, я решил копнуть глубже в трафик и посмотреть откуда и куда посылается TCP-пакет и что вообще в том пакете отправляется. Запустив tcpdump я и обнаружил причину проблемы: мой сервер отправлял запрос на сервер Google по его IPv6-адресу, поскольку на нашем новом сервере был включен IPv6. А доступ к ключу-то я открывал для IPv4-адреса.
В итоге, я просто отключил IPv6 на сервере, поскольку его не планировалось использовать, и после этого проблема с доступом к Google API решилась.