javascript - 客户端服务器从自己的域返回 json 时没有 'Access-Control-Allow-Origin'

标签 javascript php ajax angularjs linkedin-api

我有一个在前端使用 Angular/js 并在后端使用 PHP 的应用程序。两者都使用相同的域 (www.foo.bar)。

我已经在我的后端实现了 linkedin 身份验证。所以在前端我做了类似的事情

     $http({
            method: 'POST',
            url: 'http://foo.bar/api/authenticate',
            headers: { 'Content-Type' : 'application/x-www-form-urlencoded' }
        }).success(function(outcome){
            console.log("success");
        }).error(function(outcome){
            console.log('error');
        });

然后,我的服务器使用 linkedin 对用户进行身份验证(这包括一些重定向),并最终返回一个包含从 linkedin 检索到的基本个人资料信息的 json。

如果我直接访问我的 api:foo.bar/api/authenticate,它就像一个魅力,我可以看到 json。如果我在前端使用 ajax 请求调用它,我会得到

XMLHttpRequest cannot load https://www.linkedin.com/uas/oauth2/authorization?blablabla No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://foo.bar' is therefore not allowed access. 

异常。

有什么想法吗?

编辑: 在查看了可能的解决方案之后,我缩小了问题范围并或多或少地解决了它。 问题不在于我无法从自己的 api 访问 json 文件,问题在于我在 ajax 调用中进行了重定向。

public function authorize(){
    return Redirect::away("https://www.linkedin.com/uas/oauth2/authorization?response_type=linkedinApiData&redirect_uri=http://foo.bar/api/members/authenticated");
}

我在想,如果这重定向到另一个 api 调用,完成授权并返回一个 json 对象,那就没问题了,但后来我得到了前面提到的异常(我猜来自 linkedin)。

我有一个临时解决方案,只需使用 http://foo.bar/api/..>,它处理身份验证请求,进行重定向,最后重定向到我必须去的页面,并将结果 json 存储在 session 中。 当下一页加载时,我要求后端返回此 session 的内容。

是否可以通过身份验证(包含 linkedin 身份验证所需的重定向)进行发布,然后从我自己的服务器返回 json(可以正常工作并且不存在访问 header 问题?

最佳答案

域名只是源站的一部分。整个起源:

  • 方案
  • 完整的主机名
  • 端口

…必须匹配。

foo.barwww.foo.bar 不同。

要么与您使用的主机名保持一致(一般来说,将所有请求从 example.com 重定向到 www.example.com 或反之亦然是个好主意)或实现 circumvent the same origin policy 的方法之一.

关于javascript - 客户端服务器从自己的域返回 json 时没有 'Access-Control-Allow-Origin',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23580772/

相关文章:

javascript - 在搜索框中收到输入之前,如何隐藏列表结果?

php - 准备 MySQL INSERT INTO ON DUPLICATE KEY UPDATE 的语法是否正确?

PHP 面向对象 : retrieve data from database

javascript - 在 ajax 调用中设置对象数组

javascript - 使用 HTML 和 Java 创建与 google 相同的搜索框

javascript - 如何将 websocket 推送定时器嵌入到网页中?

javascript - HTML5 音频进度条长度

javascript - WebGL - 更改对象之间的颜色

php - 在带有列名的关联数组中循环

javascript - "confirm"模态 jquery 的奇怪行为