浏览器跨域问题小结

一、问题由来:

    安全性,其实跨域只有浏览器有安全检查,不用浏览器自己写个web-client调用服务器端,是没有任何问题的。

    只有浏览器(特别是谷歌)会检查安全限制,也就是被请求端响应头是否Response.AddHeader("Access-Control-Allow-Origin", "*")

二、解决办法:

  1、谷歌浏览器快捷方式加参数,禁用这个检查:

C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe --disable-AAA-web-security --user-data-dir=C:\GuGeData

--disable-web-security --user-data-dir=C:\\GugeData

   2:请求端用$.getJSON或者jsonp,被请求端(服务器)需要加上响应头:

效果图:

请求端(浏览器、客户端)代码:

function callGetJson() {
            var s = "", sUrl = "http://localhost:7419/api/datetime.ashx?method=now", data = { p1: "01", p2: "02" }, txt = document.getElementById("txt_info");
            if (document.getElementById("chk_kuayu").checked) sUrl += "&kuayu=1"; else sUrl += "&kuayu=0";
            try {
                $.getJSON(sUrl, data, function (result) {
                    alert(s = "$.getJSON-返回值:" + result);
                    txt.append(s + "\r\n");
                });
            } catch (x) {
                alert(x.message);
            }
        }

 $.getJSON本质上是get访问,带上的post参数{ p1: "01", p2: "02" },接收端都变成了这样的:

http://localhost:7419/api/datetime.ashx?method=now&kuayu=0&p1=01&p2=02

被请求端(海宏检测线服务器端):

context.Response.AddHeader("Access-Control-Allow-Origin", "*"); //响应:告诉调用者,允许所有的跨域调用,不限制
context.Response.AddHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");   //允许get这类jsonp调用

测试过下面的$.ajax用jsonp的,感觉效果不理想:

function callAjax() {
            var s = "", sUrl = "http://localhost:7419/api/datetime.ashx?method=now", data = {}, txt = document.getElementById("txt_info");
            if (document.getElementById("chk_kuayu").checked) sUrl += "&kuayu=1"; else sUrl += "&kuayu=0";
            try {
                $.ajax({
                    async: false,
                    url: sUrl,      //提交 请求数据   
                    data: data,     //数据
                    contentType: "application/json", //必须有  
                    dataType: 'JSON', //"jsonp"
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
                        //xhr.setRequestHeader("Origin", "*");
                        //XMLHttpRequest.setRequestHeader("Access-Control-Allow-Origin", "http://192.168.88.66/');
                        //XMLHttpRequest.setRequestHeader("Access-Control-Allow-Origin", "*");
                        //console.log(xhr.getAllResponseHeaders());
                        var h = new Headers();
                        h.append("Access-Control-Allow-Origin", "*");
                        console.log(xhr);
                    },
                    success: function (result) {
                        alert(s = "$.ajax-success-返回值:" + result);
                        txt.append(s + "\r\n");
                    },
                    error: function (result) {
                        alert(s = "$.ajax-error-错误值:" + JSON.stringify(result));
                        txt.append(s + "\r\n");
                    }
                });
            } catch (x) {
                alert(x.message);
            }
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值