跨域的三种方法(cors、nginx、jsonp)

1,363 阅读1分钟

cors

在server-run.js服务器中配置:

var allowCrossDomain = function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');//自定义中间件,设置跨域需要的响应头。
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');  //允许任何方法
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,X-Session-Token');   //允许任何类型
    next();
   };
 app.use(allowCrossDomain);

nginx

nginx配置内容

  server {
    listen       8089;  #服务端口
    server_name  localhost;  #服务名
    root   html;    #web根目录
    # cors
    add_header Access-Control-Allow-Origin $http_origin always;  # '*' 
    add_header Access-Control-Allow-Credentials true always;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS' always;
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' always;

    #请求http://localhost:8080/api,将该请求转发http://localhost:3000/api
    location /api {
        proxy_pass http://localhost:3000/api;
    }
}

注意项

jsonp

  <script> 只支持get方式
前端修改:
  function getByJson(){
            $.ajax({
                url:"http://localhost:3000/api/jsop",
                data:{name:"xxxx"},
                dataType:"jsonp",
                jsonpCallback:"handleResponse"
            })
        }
        // 回调函数
        function handleResponse(data){  // data--服务端数据
            console.log(data);    
        }
server修改
app.get("/api/jsonp",function(req,res){
    var data={name:"test"}
    data=JSON.stringify(data); //转字符串
    var callback='handleResponse('+data+')';
    res.send(callback)
})