web跨域问题

跨域请求的原因:

由于浏览器的同源策略,即属于不同域的页面之间不能相互访问各自的页面内容。


跨域的场景:

一、域名不同(www.csdn.net和www.baidu.com即为不同域名)

二、二级域名不同,子域名不同(www.csdn.net/postedit 和 www.csdn/nav)

三、端口不同、协议不同(http://www.csdn和https://www.csdn.net---www.csdn.com:8080和www.csdn.com:6666)


跨域的方法有很多种,这里着重介绍CORS方法和JsonP方法

纯后端方式:CORS

CORS是w3c标准方式,通过在web服务器端设置响应头的的属性来达到解决跨域的目的

这个属性为:Accesss-Control-Allow 属性值设置为需要跨域访问的网页地址。

例如:res.writeHead(200,{"Access-Control-Allow-Origin":"www.csdn.net"})


前后端结合:JsonP

网页的同源策略限制我们不能直接通过AJAX访问不同域的内容,但是却可以通过“src”这个属性来访问不同域下的资源。JsonP就是利用这个特点来解决跨域问题。

1、客户端的代码

  //设置按钮添加点击事件
        $("<button></button>").appendTo("body").on("click",clickHandler).text("跨域")


        function clickHandler(e) {
            //动态添加script属性,并在url中以参数形式把返回结果的执行函数名发送给服务器
            $("<script src='http://10.9.xx.244:5005?callBack=getData'><\/script>").appendTo("head");
        }
        //获取响应结果后的处理函数
        function getData(obj) {

                console.log(obj)

        }

2、需要跨域访问的服务器代码(这里是用的node.js作为服务端)



var http=require("http");
var queryString=require("querystring");

var server=http.createServer(function (req,res) {
        var data=""
    req.on("data",function (d) {
        console.log(d)
            data+=d;
    })

    req.on("end",function () {
       var obj= queryString.parse(data)

            //截取url中携带的回调函数名
        var fn= req.url.split("?")[1].split("=")[1]

        var obj={a:11,b:14}
        console.log(fn)
        res.writeHead(200,{"Content-Type":"text/plane","Access-Control-Allow-Origin":"*"})
            //回调函数并将数据作为参数发送过去
        res.write( fn+"("+JSON.stringify(obj)+")");
        res.end()

    })
})

server.listen(5005,"10.9.xx.244",function () {

    console.log("start listen ....")
});

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值