zoukankan      html  css  js  c++  java
  • 关于跨域的实验

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

    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", "*");
  • 相关阅读:
    css sprite的实现
    python的range()函数使用方法
    Codeforces Round #260 (Div. 1) 455 A. Boredom (DP)
    n个整数全排列的递归实现(C++)
    AngularJS进阶(三十一)AngularJS项目开发技巧之获取模态对话框中的组件ID
    Swift扩展(Extension)
    leetcode 88 Merge Sorted Array
    Unity3D摄像机尾随人物
    mybatis 高级映射和spring整合之与Spring整合(6)
    mybatis 高级映射和spring整合之查询缓存(5)
  • 原文地址:https://www.cnblogs.com/sanqianjin/p/5035324.html
Copyright © 2011-2022 走看看