关于跨域的实验

两个网站之间需要跨域访问,怎么办?

1、在Web.config里面添加允许跨域的语句

    <httpProtocol>
      <!--跨域-->
      <customHeaders>
        <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Session,Content-Range,Content-Disposition,content-type" />
      </customHeaders>
    </httpProtocol>

但是这样做,就会产生很大的系统漏洞,因为所有的方法都会被跨域请求。如果在Access-Control-Allow-Origin设置固定的允许跨域请求的地址,可由于网站会部署到不同的网址和地址,这个节点会被经常修改,对于运维来说就比较困难了。

2、使用jsonp。

这个jsonp确实可以解决跨域问题,但是对action只能要求成void的。而且还需要设置callbackcallback的参数格式,否则即使请求成功,也只能走error方法。

<script>
    //jsonp里面有个大问题,就是需要将jsonp的callback写在action里面。
    $(function () {
        $("#qwer").click(function () {
            var code = $("#Code").val();
            //设置浏览器支持跨域
            //jQuery.support.cors = true;
            $.ajax({
                type: "get",
                url: "http://localhost:50739/SalesOrder/JsonpActive",
                dataType: "jsonp",
                data: { "code": code },
                //crossDomain: true,
                jsonp: "callback",
                success: function (data) {
                    alert("success " + data.result);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("error");
                }
            });
        })
    });
</script>
        //jsonp激活序列号
        public void JsonpActive(string code)
        {
            //Response.Headers.Add("Access-Control-Allow-Origin", "*");
            //HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
            var result = true;
            Response.Clear();
            Response.Write(Request.QueryString["callback"] + "({\"result\":\"" + result + "\"})");
            Response.End();
        }

 3、给单个action设置跨域请求,支持获取页面

    $(function () {
        $("#qwer").click(function () {
            var code = $("#Code").val();
            //设置浏览器支持跨域
            jQuery.support.cors = true;
            $.ajax({
                type: "get",
                url: "http://localhost:50739/SalesOrder/Check,
                crossDomain: true,//设置浏览器支持跨域
                success: function (data) {
                    alert("success " + data);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("error");
                }
            });
        })
    });
在action里面设置单独的跨域请求
//
允许跨域
HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");

 

posted @ 2015-12-10 11:08  寂寞之砂  阅读(604)  评论(0编辑  收藏  举报