У меня возникают проблемы при отправке запроса на API контактов Google из моего браузера в среде разработки.
Я пытаюсь запросить фид контактов из моего веб-приложения, размещенного на https://localhost:3001, с помощьюотправка XHR-запроса на https://www.google.com/m8/feeds/contacts/default/thin?alt=json&access_token=MYTOKEN&max-results=5000&v=3.0
Ранее мы использовали JSONP для выполнения этого запроса (как предлагалось на различных других справочных форумах), но недавно эта ошибка начиналась с этой ошибки:
Refused to execute script from 'https://www.google.com/m8/feeds/contacts/default/thin?alt=json&access_token=MYTOKEN&max-results=5000&v=3.0&callback=jQuery33107099178438653957_1542737952472&_=1542737952473' because its MIME type ('application/json') is not executable, and strict MIME type checking is enabled.
Я понимаю, что теперь это происходит с ошибкой, поскольку браузер проверяет mimetype ответа и, поскольку это не application/javascript
, он не должен оцениваться как сценарий, и поэтому JSONP не работает.Мы пытались запросить application/javascript
, но похоже, что API не даст нам ответ с этим mimetype.
Теперь мы пытаемся очистить наш акт, но мы сталкиваемся с проблемой CORS, котораяЯ полагаю, это причина, по которой весь Интернет в первую очередь говорит друг другу использовать JSONP.
Когда мы пытаемся сделать запрос без JSONP, мы получаем эту ошибку
Access to XMLHttpRequest at 'https://www.google.com/m8/feeds/contacts/default/thin?alt=json&access_token=MYTOKEN&max-results=5000&v=3.0' from origin 'https://localhost:3001' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Однако в глубине форума поддержки Google кто-то предложил использовать googleapis.com
вместо google.com
.Как жаворонок, мы попробовали это, и это действительно работает.Моя проблема сейчас в том, что я понятия не имею, почему это работает или будет продолжать работать.В документах не упоминается использование этого нового хоста - они упоминают URL googleapis.com
в качестве области OAuth только для чтения, но это кажется касательным к этой проблеме.Является ли googleapis.com
действительно новым именем хоста, которое мы должны использовать для получения контактов из браузера?
РЕДАКТИРОВАТЬ: Включая код, который делает запрос
const params = $.param({
alt: 'json',
access_token: 'MYTOKEN',
'max-results': 5000,
v: '3.0'
})
const url = `https://www.google.com/m8/feeds/contacts/default/thin?${params}` # when I change this to www.googleapis.com it works
$.get(url, responseHandler)
РЕДАКТИРОВАТЬ: Включая заголовки запроса назапрос опций CORS preflight, который мой браузер отправляет по какой-то причине:
Accept: text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.5
Access-Control-Request-Headers: x-csrf-token
Access-Control-Request-Method: GET
Cache-Control: no-cache
Connection: keep-alive
Host: www.google.com
Origin: https://localhost:3001
Pragma: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel …) Gecko/20100101 Firefox/63.0