No' Access-Control-Allow-Origin'请求orgin

时间:2016-10-17 07:21:20

标签: angularjs node.js cross-browser cors

我对跨域域请求有一个简单的任务。所以我创建了一个示例快速应用程序,它有一个到' / redirect'的路由,这将重定向到" http://www.google.com& #34 ;.在前端,我创建了一个具有onclick事件的按钮,这将请求' / redirect'

我在服务器端的代码:



app.get('/redirect',function(req,res){
  res.redirect("http://www.google.com");
})




在前端:



<html>
  <head>
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script type="text/javascript">
      var app = angular.module('myApp',[]);
      app.controller('crtl',function ($scope,$http,$timeout){
        $scope.fun1 = function(){
          $http({
            method: 'GET',
            url: '/redirect'
          }).then(function successCallback(response) {
               // console.log(response.data)
               console.log("got the request for redirect");
            }, function errorCallback(response) {});
        }
      });
    </script>
  </head>
  <body ng-app="myApp" ng-controller="crtl">
    <center><br/>
      <button ng-click="fun1()" class="btn">Click Me</button>
    </center>
  </body>
</html>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您无法使用服务器启用对其他域的直接跨域访问。浏览器根本就不会那样工作。浏览器要求您尝试访问的域(在您的示例中为www.google.com)是支持跨域访问的域。

Timestamp myID specialID 0 2016-01-01 00:00:00 001 NaN 1 2016-01-01 01:00:00 001 NaN 2 2016-01-01 02:00:00 001 NaN 3 2016-01-01 00:00:00 002 NaN 4 2016-01-01 01:00:00 002 foo_0 5 2016-01-01 02:00:00 002 NaN 6 2016-01-01 00:00:00 003 NaN 7 2016-01-01 01:00:00 003 NaN 8 2016-01-01 02:00:00 003 foo_1 9 2016-01-02 00:00:00 004 NaN 10 2016-01-02 01:00:00 004 foo_2 11 2016-01-02 02:00:00 004 NaN 只是告诉浏览器从其他来源获取内容。如果浏览器没有获取该内容的交叉原始权限,则res.redirect()不会比尝试直接访问它的浏览器更好地工作。

您可以将交叉原始内容嵌入到自己的iframe中,并且可以在那里显示内容,但是您不会被允许从您自己的Javascript访问内容(出于相同的交叉原因)。

您可以代理服务器中的内容,这意味着您可以要求您的服务器为您获取内容,您的服务器将获取它并将其返回到浏览器(通过您的域)。这适用于某些用途,但这取决于您尝试对内容做什么(您不会在您的问题中分享)这是否能满足您的需求。