Таким образом, проблема связана с API https://social.yahooapis.com/, а не с вашим кодом, однако есть способы обойти его.
Кто-то должен связаться с Yahoo Social API Разработчики и сказать им, чтобы осуществить следующее решение:
Скажем, например, ваш маркер доступа aouth2 является «XXXXXXXX» и вы делаете следующий запрос, чтобы получить идентификатор пользователя из вашей JavaScript код.
$.ajax({
url: 'https://social.yahooapis.com/v1/me/guid?format=json',
beforeSend: function (xhr) {
xhr.setRequestHeader ("authorization", "Bearer " + "XXXXXXXX");
},
success:function(guuid) {
console.log(guuid);
}
});
Перед отправкой на самом деле этот запрос HTTP GET к домену social.yahooapis.com, ваш браузер распознает это запрос CORS (сделав запрос, который не является тем же самым, что и домен происхождения) и делает «предполетный проверьте "с помощью HTTP OPTIONS, чтобы узнать, является ли это действительным вызовом.
Это то, что предполетный запрос выглядит следующим образом:
Request Header
:host:social.yahooapis.com
:method:OPTIONS
:path:/v1/me/guid?format=json
:scheme:https
:version:HTTP/1.1
accept:*/*
accept-encoding:gzip, deflate, sdch
accept-language:en-US,en;q=0.8
access-control-request-headers:accept, authorization
access-control-request-method:GET
cache-control:no-cache
origin:http://yourorigin.io
pragma:no-cache
referer:http://yourorigin.io
user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.3
, а также Yahoo API отвечает обратно
Response Header
age:0
allow:OPTIONS,HEAD,GET
content-length:0
content-type:application/vnd.sun.wadl+xml
date:Sun, 10 May 2015 19:21:40 GMT
last-modified:Thu, 30 Apr 2015 13:20:58 PDT
server:ATS
servletwebservicefilter-enabled:true
status:200 OK
vary:Accept
version:HTTP/1.1
via:http/1.1 r18.ycpi.ne1.yahoo.net (ApacheTrafficServer [c sSf ]), https/1.1 r26.ycpi.sjb.yahoo.net (ApacheTrafficServer [c sSf ])
x-yahoo-social-data-source:default_source
x-yahoo-social-host:ws127.progrss.ne1.yahoo.com
y-rid:er2nai1akvbu4
Несмотря на то, réponse возвращается с 200OK статусом он отсутствует следующий заголовок ответа :
Access-Control-Allow-Origin:*
Хром и другие современные веб-браузеры имеют безопасность что если вы делаете запрос GET CORS и ответ не имеет заголовка Access-Control-Allow-Origin, тогда в журналах будет отображаться следующее сообщение: REGARDLESS - то, что фактически возвращается социальным.yahooapis.com
XMLHttpRequest cannot load https://social.yahooapis.com/v1/me/guid?format=json.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://yourorigin.com' is therefore not allowed access.
Так что вы на самом деле получить обратно:
{
"guid" :
{
"uri": "XXXX", // URI value
"value": "XXXX"
}
}
Однако из ваших браузеров особенности безопасности показывает:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
он отлично работает для р eople, которые используют YDN SDK (не браузерные способы доступа к API), реализация на стороне сервера и старый веб-браузер. Однако не работает для новых современных браузеров. Который также объясняет непоследовательный пользовательский опыт работы с некоторыми людьми, но не с другими людьми в этом форуме. https://developer.yahoo.com/forum/OAuth-General-Discussion-YDN-SDKs/http-social-yahooapis-com-Will-be-right-back/1395509802423-89faffa2-1503-486d-bc29-6505719bd774/
Единственный способ использовать это прямо сейчас - сделать запрос GET HTTP с вашего кода сервера, а не на javascript клиента код. И поскольку ваш сервер не имеет функций безопасности, он получит фактический результат.
Однако, чтобы исправить проблему, разработчики Yahoo добавили Access-Control-Allow-Origin: * , чтобы разрешить клиентские запросы javascript к их api.
Я написал это, потому что знаю, что многие люди будут идти по тому же вопросу. Если это было полезно для вас, и проблема все еще не была исправлена, обратитесь к разработчикам Yahoo и попросите их реализовать это решение.
Я пробовал много для решения, а затем сдался и использовал Curl через PHP вместо этого. Но я бы хотел, чтобы было решение, так как у кого-то еще может быть эта проблема ... –
Да, я столкнулся с той же проблемой , Думаю, я мог бы проксировать его через Nginx. – newtonapple