澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站浅谈跨域以WebService对跨域

浅谈跨域以WebService对跨域的支撑

2015/04/03 · HTML5, JavaScript · WebService, 跨域

初稿出处: 寒江独钓   

跨域难点源于JavaScript的同源计策,即唯有 协议 主机名 端口号 (如存在)同样,则允许相互拜访。相当于说JavaScript只可以访问和操作本人域下的财富,无法访问和操作其余域下的财富。

在原先,前端和后端混杂在1道, 比方JavaScript直接调用同系统之中的贰个Httphandler,就不设有跨域的题目,可是随着今世的这种八种客户端的风行,举例二个用到一般会有Web端,App端,以及WebApp端,各样客户端平常会采取一样套的后台管理逻辑,即API, 前后端分离的付出政策流行起来,前端只关切展现,平时使用JavaScript,后端管理逻辑和数量一般选拔WebService来提供json数据。一般的前端页面和后端的WebServiceAPI日常陈设在不相同的服务器只怕域名上。那样,通过ajax请求WebService的时候,就能够油但是生同源攻略的标题。

内需表明的是,同源攻略是JavaScript里面包车型地铁限制,其他的编制程序语言,譬喻在C#,Java或然iOS等其余语言中是能够调用外部的Web瑟维斯,也便是说,假诺开拓Native应用,是不存在那几个标题标,然则只要开采Web只怕Html5如WebApp,经常使用JavaScript ajax对WebService发起呼吁然后分析重返的值,这样就可能存在跨域的难点。

貌似的,很轻便想到,将表面的财富搬到同三个域上就能够减轻同源战术的界定的。即在Web网址上同一时间开辟叁个Http服务端页面,全体JavaScript的央求都发到那几个页面上来,这么些页面在中间采纳任何语言去调用外部的WebService。即增加2个代理层。这种方法得以消除难题,然则非常不够直接和高效。

现阶段,相比常见的跨域解决方案包含JSONP (JSON with padding)和CORS (Cross-origin resource sharing )。一些消除方案须要客户端和服务端协作如JSOP,一些则只必要服务端合营管理比方CO奥迪Q7S。上面分别介绍那两种跨域方案,以及劳动端WebService如何扶助这三种跨域方案。

详解JS跨域难题

2016/10/31 · JavaScript · Javascript, 跨域

原稿出处: trigkit4(@trigkit4 )   

何以是跨域?

1 前言:

一、认识JSONP

<script>成分得以看作一种Ajax传输体制:只须安装<script>成分的src属性(假使它还没插入到document中,供给插入进去),然后浏览器就能发送HTTP请求下载src属性所针对的U卡宴L。使用<script>成分进行Ajax传输的二个根本原因是,它不受同源战术的熏陶,因而得以选拔它们从任何的服务器请求数据,首个原因是包括JSON编码数据的响应体会解码。 这种使用<script>成分作为Ajax传输的工夫称为JSONP。
若果你早就写了八个劳务,它管理GET请求并重临JSON编码的数码,同源文书档案能够在代码中利用XMLHttpRequest和JSON.parse()。若是在服务器上启用了CO景逸SUVS,在新的浏览器下,跨域的文书档案也能够运用XMLHttpRequest享受到该服务。在不帮助CO凯雷德S的旧浏览器下,跨域文书档案只透过<script>成分访问这几个服务。使用JSONP,JSON响应数据是法定的JavaScript代码,当它达到浏览器将实行它。

JSONP以及WebService的支持

同源战略下,某些服务器是心有余而力不足赢得到服务器以外的数额,不过html里面包车型客车img,iframe和script等标签是个例外,那个标签能够透过src属性请求到任何服务器上的数据。而JSONP正是通过script节点src调用跨域的央浼。

当大家向服务器交由贰个JSONP的乞求时,大家给服务传了三个破例的参数,告诉服务端要对结果极其管理一下。那样服务端重回的数目就能够进行一些包装,客户端就足以拍卖。

举个例证,服务端和客户端约定要传二个名称叫callback的参数来行使JSONP功效。比如请求的参数如下:

JavaScript

1
http://www.example.net/sample.aspx?callback=mycallback

假诺未有后边的callback参数,即不选取JSONP的形式,该服务的归来结果也许是一个仅仅的json字符串,比方:

JavaScript

{ foo : 'bar' }

1
{ foo : &#039;bar&#039; }

假使和劳务端约定jsonp格式,那么服务端就能够管理callback的参数,将赶回结果进行一下拍卖,比方拍卖成:

JavaScript

mycallback({ foo : 'bar' })

1
mycallback({ foo : &#039;bar&#039; })

能够看出,那实在是一个函数调用,比方能够兑未来页面定义2个名称叫mycallback的回调函数:

JavaScript

澳门新浦京娱乐场网站浅谈跨域以WebService对跨域的支持,js跨域问题浅析及解决方法优缺点对比。mycallback = function(data) { alert(data.foo); };

1
2
3
4
mycallback = function(data)
         {
            alert(data.foo);
         };

今日,请求的重回值回去触发回调函数,那样就完了了跨域请求。

假定使用ServiceStack创设WebService的话,协助Jsonp格局的调用一点也不细略,只须要在AppHost的Configure函数里面注册一下对响应结果开始展览过滤处理就能够。

JavaScript

/// <summary> /// Application specific configuration /// This method should initialize any IoC resources utilized by your web service classes. /// </summary> /// <param name="container"></param> public override void Configure(Container container) { ResponseFilters.Add((req, res, dto) => { var func = req.QueryString.Get("callback"); if (!func.isNullOrEmpty()) { res.AddHeader("Content-Type", ContentType.Html); res.Write("<script type='text/javascript'>{0}({1});</script>" .FormatWith(func, dto.ToJson())); res.Close(); } }); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/// &lt;summary&gt;
        /// Application specific configuration
        /// This method should initialize any IoC resources utilized by your web service classes.
        /// &lt;/summary&gt;
        /// &lt;param name=&quot;container&quot;&gt;&lt;/param&gt;
        public override void Configure(Container container)
        {
            ResponseFilters.Add((req, res, dto) =&gt;
            {
                var func = req.QueryString.Get(&quot;callback&quot;);
                if (!func.isNullOrEmpty())
                {
                    res.AddHeader(&quot;Content-Type&quot;, ContentType.Html);
                    res.Write(&quot;&lt;script type=&#039;text/javascript&#039;&gt;{0}({1});&lt;/script&gt;&quot;
                        .FormatWith(func, dto.ToJson()));
                    res.Close();
                }
            });
        }

JSONP跨域格局相比较有利,也扶助各个较老的浏览器,不过缺点很显明,他只援救GET的不2法门提交,不帮助任何Post的付出,Get情势对请求的参数长度有限定,在稍微意况下也许不满意须要。所以上面就介绍一下COHighlanderS的跨域消除方案。

哪些是跨域?

概念:只要协议、域名、端口有其余一个例外,都被作为是见仁见智的域。

JavaScript

USportageL 表达 是还是不是同意通讯 同壹域名下 允许 同一域名下分化文件夹 允许 同一域名,不一致端口 不容许 同壹域名,不一致协商 不容许 域名和域名对应ip 不允许 主域同样,子域差别 不允许 同1域名,不一样二级域名(同上) 不允许(cookie这种景观下也不容许访问) 不一样域名 不允许

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
URL                           说明                        是否允许通信
http://www.a.com/a.js
http://www.a.com/b.js         同一域名下                    允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js  同一域名下不同文件夹           允许
http://www.a.com:8000/a.js
http://www.a.com/b.js         同一域名,不同端口             不允许
http://www.a.com/a.js
https://www.a.com/b.js        同一域名,不同协议             不允许
http://www.a.com/a.js
http://70.32.92.74/b.js       域名和域名对应ip               不允许
http://www.a.com/a.js
http://script.a.com/b.js      主域相同,子域不同             不允许
http://www.a.com/a.js
http://a.com/b.js             同一域名,不同二级域名(同上)   不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js
http://www.a.com/b.js         不同域名                      不允许

对于端口和研讨的两样,只可以通过后台来化解。

概念:只要协议、域名、端口有其余二个不1,都被当作是例外的域。

首先对参照他事他说加以考察小说小编表示谢谢,你们的经验总结给大家这么些新手提供了太多能源。
正文致力于化解AJAX的COTucsonS难题,笔者在逻辑上进展了梳理:首先,系统的下结论了CO牧马人S难点的来源—同源战略;其次,介绍JSONP这种仅能支撑GET请求的跨域格局和COTiggoS作比较;最终,演说CO安德拉S的XH昂科威化解方法和IE中的XD途胜消除办法,在此基础上提供了工具函数举办跨浏览器的HTTP请求对象创建。

2、原理解析

同源战略下,有些服务器是不能够取拿到服务器以外的数量,然则html里面包车型地铁img,iframe和script等标签是个不等,这一个标签能够经过src属性请求到其余服务器上的数码。而JSONP 正是通过script节点src调用跨域的请求。
当我们向服务器交由三个JSONP的请求时,大家给服务传了八个特殊的参数,告诉服务端要对结果极其处理一下。那样服务端重临的多少就能够议及展览开一些打包,客户端就足以拍卖。
举例。服务端和客户端约定要传1个名字为callback的参数来使用JSONP作用,比方请求的参数如下:

http://www.example.net/sample.aspx?callback=mycallback

要是未有前面的callback参数,即不选拔JSONP的形式,该服务的归来结果大概是1个单纯的json字符串,比方:{foo:'bar'}。但是借使接纳JSONP形式,那么再次回到的是多个函数调用:mycallback({foo:'bar'}),那样大家在代码之中,定义两个名称叫mycallback的回调函数,就能够缓慢解决跨域难题了。

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<script src="http://www.bonzeragro.com/uploads/allimg/190601/22334Q318-0.jpg"></script> 
<title></title> 
<style> 
body {
    background-color: #f3f3f3;
}
.main {
    width: 645px;
    margin: 30px auto;
    position: relative;
}
form {
    font-size: 0;
}
#result {
    position: absolute;
    top: 41px;
    left: -1px;
    width: 537px;
    border: 1px solid #e3e3e3;
    border-top: 0 none;
    background-color: #fff;
    padding: 0;
    color: #333;
    margin: 0;
    list-style: none;
}
#result li {
    line-height: 24px;
    padding-left: 12px;
}
#keyWords {
    width: 480px;
    padding: 10px 50px 10px 7px;
    border: 0;
    background-image: none;
    height: 20px;
    line-height: 20px;
    box-shadow: 0 1px 3px rgba(0,0,0,0.2);
    -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.2);
    -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.2);
    vertical-align: middle;
    outline:none;
} 
#search {
    width: 104px;
    height: 40px;
    line-height: 40px;
    line-height: 37px9;
    padding: 0;
    border: 0;
    background-position: -464px -42px;
    cursor: pointer;
    color: #000;
    font-size: 16px;
    vertical-align: middle;
    outline:none;
} 
#search:hover {
    box-shadow: 1px 1px 3px rgba(0,0,0,0.2);
}
</style> 
<script type="text/javascript"> 
function relatedWords(data){ 
    var _html=[]; 

    for(var i=0;i<data.s.length;i  ){
        _html.push('<li>'   data.s[i]   '</li>');
    }

    $('#result').html(_html.join(''));
}; 

$(function(){ 
    $('#keyWords').keyup(function() { 
        var val = $(this).val(); 
        if (val.trim() == '') {
            return ;
        }

        $.ajax({ 
            url:'http://suggestion.baidu.com/su?wd=' val '&json=1&p=3&req=2&cb=relatedWords', 
            dataType:'jsonp' 
        });
    }); 
}); 
</script> 
</head> 
<body> 
<div class="main">
    <form>
        <input type="text" id="keyWords" />
        <input type="button" id="search" value="百度一下" />
    </form>
    <ul id="result"></ul>
</div>


</body> 
</html>

CORS跨域及WebService的支持

先来看贰个例子,我们新建三个着力的html页面,在个中编写二个总结的是或不是协助跨域的小本子,如下:

XHTML

<html xmlns="; <head> <title>AJAX跨域请求测试</title> </head> <body> <input type='button' value='发轫测试' onclick='crossDomainRequest()' /> <div id="content"></div> <script type="text/javascript"> //<![CDATA[ var xhr = new XMLHttpRequest(); var url = ''; function crossDomainRequest() { document.getElementById("content").innerHTML = "初步……"; if (xhr) { xhr.open('POST', url, true); xhr.onreadystatechange = handler; xhr.send(); } else { document.getElementById("content").innerHTML = "无法创造 XMLHttpRequest"; } } function handler(evtXH途观) { if (xhr.readyState == 肆) { if (xhr.status == 200) { var response = xhr.responseText; document.getElementById("content").innerHTML = "结果:" response; } else { document.getElementById("content").innerHTML = "差别意跨域请求。"; } } else { document.getElementById("content").innerHTML = "<br/>执市场价格况 readyState:" xhr.readyState; } } //]]> </script> </body> </html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>AJAX跨域请求测试</title>
</head>
<body>
  <input type='button' value='开始测试' onclick='crossDomainRequest()' />
  <div id="content"></div>
 
  <script type="text/javascript">
    //<![CDATA[
    var xhr = new XMLHttpRequest();
    var url = 'http://localhost:8078/json/ShopUserLogin';
    function crossDomainRequest() {
      document.getElementById("content").innerHTML = "开始……";
      if (xhr) {
        xhr.open('POST', url, true);
        xhr.onreadystatechange = handler;
        xhr.send();
      } else {
        document.getElementById("content").innerHTML = "不能创建 XMLHttpRequest";
      }
    }
 
    function handler(evtXHR) {
      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
          var response = xhr.responseText;
          document.getElementById("content").innerHTML = "结果:" response;
        } else {
          document.getElementById("content").innerHTML = "不允许跨域请求。";
        }
      }
      else {
        document.getElementById("content").innerHTML = "<br/>执行状态 readyState:" xhr.readyState;
      }
    }
    //]]>
  </script>
 
</body>
</html>

下一场保留为本地html文件,能够看来,那个剧本中,对地点的劳务 发起了1个伸手, 如若使用chrome 直接打开,会师到输出的结果,不允许跨域请求。 在javascript调控台程序中一律能够看来错误提醒:

澳门新浦京娱乐场网站 1

那么只要在回来响应头header中注入Access-Control-Allow-Origin,那样浏览器检查评定到header中的Access-Control-Allow-Origin,则就可以跨域操作了。

同等,假诺应用ServcieStack,在众多地方能够支持COQX56S的跨域方式。最简易的依然在AppHost的Configure函数里面一向写入:

JavaScript

/// <summary> /// Application specific configuration /// This method should initialize any IoC resources utilized by your web service classes. /// </summary> /// <param name="container"></param> public override void Configure(Container container) { this.AddPlugin(new CorsFeature()); }

1
2
3
4
5
6
7
8
9
/// &lt;summary&gt;
/// Application specific configuration
/// This method should initialize any IoC resources utilized by your web service classes.
/// &lt;/summary&gt;
/// &lt;param name=&quot;container&quot;&gt;&lt;/param&gt;
public override void Configure(Container container)
{
    this.AddPlugin(new CorsFeature());
}

如此就能够了,也正是采纳私下认可的CO本田CR-VS配置:

JavaScript

CorsFeature(allowedOrigins:"*", allowedMethods:"GET, POST, PUT, DELETE, OPTIONS", allowedHeaders:"Content-Type", allowCredentials:false);

1
2
3
4
CorsFeature(allowedOrigins:&quot;*&quot;,
allowedMethods:&quot;GET, POST, PUT, DELETE, OPTIONS&quot;,
allowedHeaders:&quot;Content-Type&quot;,
allowCredentials:false);

假诺仅仅允许GET和POST的伸手支持COBMWX五S,则只须求改为:

JavaScript

Plugins.Add(new CorsFeature(allowedMethods: "GET, POST"));

1
Plugins.Add(new CorsFeature(allowedMethods: &quot;GET, POST&quot;));

理所当然也能够在AppHost的Config里面安装全局的CO普拉多S,如下:

JavaScript

/// <summary> /// Application specific configuration /// This method should initialize any IoC resources utilized by your web service classes. /// </summary> /// <param name="container"></param> public override void Configure(Container container) { base.SetConfig(new EndpointHostConfig { GlobalResponseHeaders = { { "Access-Control-Allow-Origin", "*" }, { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" }, { "Access-Control-Allow-Headers", "Content-Type" }, }, }); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// &lt;summary&gt;
/// Application specific configuration
/// This method should initialize any IoC resources utilized by your web service classes.
/// &lt;/summary&gt;
/// &lt;param name=&quot;container&quot;&gt;&lt;/param&gt;
public override void Configure(Container container)
{
 
    base.SetConfig(new EndpointHostConfig
    {
        GlobalResponseHeaders = {
            { &quot;Access-Control-Allow-Origin&quot;, &quot;*&quot; },
            { &quot;Access-Control-Allow-Methods&quot;, &quot;GET, POST, PUT, DELETE, OPTIONS&quot; },
            { &quot;Access-Control-Allow-Headers&quot;, &quot;Content-Type&quot; },
                },
    });
}

最近运转WebService,使用postman恐怕Chrome调用那一个请求,能够看来重回的值头文件中,已经增加了响应头,并且可以健康突显重回结果了:

澳门新浦京娱乐场网站 2

CO宝马7系S使用起来大约,不须要客户端的额外管理,而且补助Post的法子交给请求,可是CO帕杰罗S的独步天下3个缺陷是对客户端的浏览器版本有供给,帮衬COCRUISERS的浏览器机器版本如下:

澳门新浦京娱乐场网站 3

 

跨域财富共享(COLX570S)

CORS(Cross-Origin Resource Sharing)跨域财富共享,定义了总得在做客跨域财富时,浏览器与服务器应该怎么着联系。CORS私行的骨干思量便是运用自定义的HTTP底部让浏览器与服务器进行调换,从而调整请求或响应是应该成功只怕失败。

<script type="text/javascript"> var xhr = new XMLHttpRequest(); xhr.open("GET", "/trigkit4",true); xhr.send(); </script>

1
2
3
4
5
<script type="text/javascript">
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "/trigkit4",true);
    xhr.send();
</script>

以上的trigkit4是相对路径,假设大家要选拔CORS,相关Ajax代码大概如下所示:

<script type="text/javascript"> var xhr = new XMLHttpRequest(); xhr.open("GET", "); xhr.send(); </script>

1
2
3
4
5
<script type="text/javascript">
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://segmentfault.com/u/trigkit4/",true);
    xhr.send();
</script>

代码与前边的界别就在于相对路线换来了其余域的相对路线,约等于你要跨域访问的接口地址。

服务器端对于CORS的支撑,首要正是经过设置Access-Control-Allow-Origin来开始展览的。假若浏览器检查评定到相应的装置,就足以允许Ajax举行跨域的造访。


要化解跨域的标题,大家能够运用以下三种办法:

复制代码 代码如下:

二 跨域难题的源流—同源攻略

总结

本文介绍了JavaScript中的跨域基本概念和产生的缘由,以及哪些缓和跨域的二种办法,一种是JSONP 壹种是 COOdysseyS,在客户端Javascript调用服务端接口的时候,如果急需帮忙跨域的话,必要服务端帮衬。JSONP的艺术正是服务端对回到的值进行回调函数包装,他的帮助和益处是支撑广大的浏览器, 缺点是仅帮忙Get的方法对服务端请求。另1种主流的跨域方案是CO奥迪Q三S,他仅要求服务端在回来数据的时候在对应头中参加标志新闻。这种艺术丰盛省事。唯1的顽疾是内需浏览器的支撑,一些较老的浏览器大概不匡助COHavalS天性。

跨域协理是开创WebService时应当考虑的三个效用点,希望本文对您在那边面有所支持,文中是利用ServiceStack来演示跨域帮衬的,假诺您用的WCF的话,知道跨域原理的前提下,完毕跨域应该轻便。

 

通过jsonp跨域

当今主题素材来了?什么是jsonp?维基百科的定义是:JSONP(JSON with Padding)是材质格式 JSON 的1种“使用情势”,能够让网页从别的网域要资料。

JSONP也叫填充式JSON,是运用JSON的1种新格局,只不过是被含有在函数调用中的JSON,举个例子:

callback({"name","trigkit4"});

1
callback({"name","trigkit4"});

澳门新浦京娱乐场网站浅谈跨域以WebService对跨域的支持,js跨域问题浅析及解决方法优缺点对比。JSONP由两局地组成:回调函数和数据。回调函数是当响应到来时应当在页面中调用的函数,而数据就是流传回调函数中的JSON数据。

在js中,我们直接用XMLHttpRequest恳请不一样域上的多少时,是不能够的。然则,在页面上引进分歧域上的js脚本文件却是能够的,jsonp正是利用那些特点来兑现的。 比方:

<script type="text/javascript"> function dosomething(jsondata){ //管理获得的json数据 } </script> <script src=";

1
2
3
4
5
6
<script type="text/javascript">
    function dosomething(jsondata){
        //处理获得的json数据
    }
</script>
<script src="http://example.com/data.php?callback=dosomething"></script>

js文件载入成功后会试行大家在url参数中内定的函数,并且会把大家须要的json数据作为参数字传送入。所以jsonp是亟需服务器端的页面进行对应的相称的。

PHP

<?php $callback = $_GET['callback'];//得到回调函数名 $data = array('a','b','c');//要赶回的数额 echo $callback.'('.json_encode($data).')';//输出 ?>

1
2
3
4
5
<?php
$callback = $_GET['callback'];//得到回调函数名
$data = array('a','b','c');//要返回的数据
echo $callback.'('.json_encode($data).')';//输出
?>

谈起底,输出结果为:dosomething(['a','b','c']);

1经您的页面使用jquery,那么通过它包裹的点子就会很便利的来进行jsonp操作了。

<script type="text/javascript"> function dosomething(jsondata){ //管理获得的json数据 } </script> <script src=";

1
2
3
4
5
6
<script type="text/javascript">
    function dosomething(jsondata){
        //处理获得的json数据
    }
</script>
<script src="http://example.com/data.php?callback=dosomething"></script>

jquery会自动生成3个大局函数来替换callback=?中的问号,之后获得到数码后又会自行销毁,实际上正是起一个临时期理函数的成效。$.getJSON方法会自动剖断是还是不是跨域,不跨域的话,就调用普通的ajax措施;跨域的话,则会以异步加载js文件的款型来调用jsonp的回调函数。

URAV4L                      表达       是或不是同意通讯

同1域名下 允许

同一域归属差别文件夹 允许

同1域名,分化端口 不允许

同一域名,不一样协商 区别意

域名和域名对应ip 差异意

主域同样,子域差别 不容许

同壹域名,分歧二级域名(同上) 不容许(cookie这种场馆下也差别意访问)

不一致域名 不容许

在客户端编制程序语言中,如javascript和 ActionScript,同源计策是3个很重大的乌兰察布观念,它的目标是为了保险用户音信的平安,制止恶意的网址窃取数据。
怀恋那样1种情景:A网址是一家银行,用户登陆今后,又去浏览其余网站。假诺此外网址能够读取A网址的 Cookie,会发出哪些?

参谋资料:

赞 收藏 评论

澳门新浦京娱乐场网站 4

JSONP的得失

JSONP的帮助和益处是:它不像XMLHttpRequest目的完毕的Ajax请求那样受到同源计策的界定;它的兼容性越来越好,在尤其古老的浏览器中都能够运作,不须要XMLHttpRequest或ActiveX的援救;并且在乞请完成后能够经过调用callback的方法回传结果。

JSONP的症结则是:它只帮助GET请求而不援助POST等其它门类的HTTP请求;它只协助跨域HTTP请求这种场合,不可能一蹴而就差异域的五个页面之间怎么进行JavaScript调用的难点。

对于端口和协议的两样,只好通过后台来缓慢解决。

 

CORS和JSONP对比

CO奥迪Q五S与JSONP比较,无疑更是先进、方便和保证。

1、 JSONP只好促成GET请求,而CO牧马人S支持具备种类的HTTP请求。 二、 使用CO奥迪Q7S,开荒者能够行使普通的XMLHttpRequest发起呼吁和获得多少,比起JSONP有越来越好的错误管理。 三、 JSONP首要被老的浏览器扶助,它们往往不帮衬COOdysseyS,而好多当代浏览器都曾经支撑了COENCORES)。

1
2
3
4
5
6
1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
 
2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
 
3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS)。
 

跨域能源共享(COHavalS)

很引人侧目,假诺 Cookie 包括隐秘(比方积储总额),那一个消息就能漏风。更吓人的是,Cookie 往往用来保存用户的报到状态,假若用户并未有退出登入,别的网址就能够改朝换代用户,横行霸道。因为浏览器同一时候还分明,提交表单不受同源政策的限制。总之,”同源政策”是必备的,否则库克ie 能够共享,网络就毫无安全可言了。

经过改换document.domain来跨子域

浏览器都有二个同源攻略,其范围之1正是首先种情势中大家说的无法通过ajax的方法去央浼例外源中的文书档案。 它的第三个限制是浏览器中差别域的框架之间是不能够拓展js的相互操作的。
昨今差异的框架之间是可以赢得window对象的,但却无计可施获得相应的习性和办法。举例,有贰个页面,它的地方是http://www.example.com/a.html , 在那个页面里面有七个iframe,它的src是http://example.com/b.html, 很显眼,这一个页面与它个中的iframe框架是分裂域的,所以大家是力不从心透过在页面中书写js代码来赢得iframe中的东西的:

<script type="text/javascript"> function test(){ var iframe = document.getElementById('ifame'); var win = document.contentWindow;//能够取获得iframe里的window对象,但该window对象的习性和措施大概是不可用的 var doc = win.document;//这里得到不到iframe里的document对象 var name = win.name;//这里同样赢得不到window对象的name属性 } </script> <iframe id = "iframe" src="" onload = "test()"></iframe>

1
2
3
4
5
6
7
8
9
<script type="text/javascript">
    function test(){
        var iframe = document.getElementById('ifame');
        var win = document.contentWindow;//可以获取到iframe里的window对象,但该window对象的属性和方法几乎是不可用的
        var doc = win.document;//这里获取不到iframe里的document对象
        var name = win.name;//这里同样获取不到window对象的name属性
    }
</script>
<iframe id = "iframe" src="http://example.com/b.html" onload = "test()"></iframe>

本条时候,document.domain就足以派上用场了,大家假诺把http://www.example.com/a.htmlhttp://example.com/b.html那七个页面包车型地铁document.domain都设成一样的域名就可以了。但要注意的是,document.domain的设置是有限定的,大家不得不把document.domain设置成本身或更加高超级的父域,且主域必须一致。

1.在页面 http://www.example.com/a.html 中设置document.domain:

<script type="text/javascript"> function test(){ var iframe = document.getElementById('ifame'); var win = document.contentWindow;//能够拿走到iframe里的window对象,但该window对象的性质和措施差不离是不可用的 var doc = win.document;//这里获得不到iframe里的document对象 var name = win.name;//这里一样拿到不到window对象的name属性 } </script> <iframe id = "iframe" src="" onload = "test()"></iframe>

1
2
3
4
5
6
7
8
9
<script type="text/javascript">
    function test(){
        var iframe = document.getElementById('ifame');
        var win = document.contentWindow;//可以获取到iframe里的window对象,但该window对象的属性和方法几乎是不可用的
        var doc = win.document;//这里获取不到iframe里的document对象
        var name = win.name;//这里同样获取不到window对象的name属性
    }
</script>
<iframe id = "iframe" src="http://example.com/b.html" onload = "test()"></iframe>

2.在页面 http://example.com/b.html 中也设置document.domain:

<script type="text/javascript"> document.domain = 'example.com';//在iframe载入这些页面也设置document.domain,使之与主页面包车型大巴document.domain同样</script>

1
2
3
<script type="text/javascript">
    document.domain = 'example.com';//在iframe载入这个页面也设置document.domain,使之与主页面的document.domain相同
</script>

修改document.domain的方法只适用于分化子域的框架间的交互。

CROS(克罗丝-Origin Resource Sharing)跨域能源共享,定义了总得在访问跨域能源时,浏览器与服务器应该怎么联系。CROS背后的核心情维就是利用自定义的HTTP底部让浏览器与服务器实行沟通,从而决定请求或响应是理所应当成功依旧败诉。

 

接纳window.name来进展跨域

window目的有个name属性,该属性有个特点:即在一个窗口(window)的生命周期内,窗口载入的具有的页面都以共享二个window.name的,每一个页面临window.name都有读写的权限,window.name是永久存在1个窗口载入过的保有页面中的

复制代码 代码如下:

那正是说什么样叫同样域(同源),什么叫不相同的域(分化源)呢?当三个域具备一样的会谈(如http), 一样的端口(如80),一样的host(如www.example.org),那么大家就足以认为它们是均等的域。例如 ….(暗许端口号80足以简轻易单)和…是同域,而http://www.example.org, https://www.example.org, http://www.example.org:8080, http://sub.example.org中的任何三个都将构成跨域。
留神:唯有协议、域名、端口号完全同样才是同壹域,其余意况,纵然是相呼应的IP和域名也是分裂域,具体意况如下图:

应用HTML5的window.postMessage方法跨域

window.postMessage(message,targetOrigin) 方法是html5新引入的风味,能够运用它来向其它的window对象发送音讯,无论那么些window对象是属于同源或差异源,目前IE8 、FireFox、Chrome、Opera等浏览器都早已支持window.postMessage方法。

1 赞 8 收藏 评论

澳门新浦京娱乐场网站 5

<script type="text/javascript">
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "/trigkit4",true);
    xhr.send();
</script>

澳门新浦京娱乐场网站 6

以上的trigkit四是相对路线,假诺大家要利用CO景逸SUVS,相关Ajax代码恐怕如下所示:

(那些图形忘了从何地引得了,感激笔者)

复制代码 代码如下:

 

<script type="text/javascript">
    var xhr = new XMLHttpRequest();
    xhr.open("GET", ");
    xhr.send();
</script>

日前,要是非同源,共有三种行为受到限制。

代码与之前的差异就在于相对路线换来了其余域的相对路线,也正是您要跨域访问的接口地址。

(一) 库克ie、LocalStorage 和 IndexDB 不可能读取。
(二) DOM 不能获得。
(三) AJAX 请求不能够发送。

劳务器端对于COLacrosseS的支撑,重要就是经过设置Access-Control-Allow-Origin来展开的。倘使浏览器检查实验到相应的设置,就足以允许Ajax举办跨域的访问。

作为前端开采者,我们繁多时候要做的是突破这种限制。

要化解跨域的主题材料,大家得以应用以下二种办法:

 

通过jsonp跨域

填补:同源战术还相应对有的特种景况做管理,比方限制file协议下脚本的走访权限。本地的HTML文件在浏览器中是经过file协议打开的,即使脚本能透过file协议访问到硬盘上别的任意文件,就能够产出安全隐患,最近IE八还会有那样的隐患。

最近主题素材来了?什么是jsonp?维基百科的概念是:JSONP(JSON with Padding)是质感格式 JSON 的一种“使用情势”,能够让网页从别的网域要资料。

三 跨域格局JSONP[参考1]

JSONP也叫填充式JSON,是接纳JSON的一种新点子,只可是是被含有在函数调用中的JSON,比如:

JSONP是JSON with Padding的简写,是利用JSON达成服务器与客户端跨源通讯的常用方法。最大特点正是粗略适用,老式浏览器全体支撑,服务器改变不大。

复制代码 代码如下:

 

callback({"name","trigkit4"});

它的基本思维是,网页通过抬高2个<script>成分,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在2个钦命名字的回调函数里传回到。
JSOP包含两片段:回调函数和数量,回调函数是在响应到来时应有调用的函数,一般通过询问字符串加多;数据正是流传回调函数中的JSON数据,确切的说,是一个JSON对象,能够一贯访问。

JSONP由两局地组成:回调函数和数据。回调函数是当响应到来时应当在页面中调用的函数,而数据便是传播回调函数中的JSON数据。

 

在js中,大家直接用XMLHttpRequest请求差异域上的数码时,是不得以的。但是,在页面上引进不一样域上的js脚本文件却是能够的,jsonp正是利用那特性子来促成的。 比如:

实例:

复制代码 代码如下:

//访问跨域src并将数据填充到script标签中的函数
function addScriptTag(src) {
var script = document.createElement(‘script’);
script.setAttribute(“type”,”text/javascript”);
script.src = src;
document.body.appendChild(script);
}
//网页动态插入<script>成分,由它向跨源网站src发出请求,src中富含回调函数
window.onload = function () {
addScriptTag(‘‘);
}
//回调函数的参数暗中认可是回来的多少
function foo(data) {
console.log(‘Your public IP address is: ’ data.ip);
};

<script type="text/javascript">
    function dosomething(jsondata){
        //处理获得的json数据
    }
</script>
<script src=">

/地点代码通过动态加多<script>成分,向劳动器example.com发出请求。注意,该请求的询问字符串有一个callback参数,用来钦定回调函数的名字,那对于JSONP是必需的。/

js文件载入成功后会施行大家在url参数中钦赐的函数,并且会把大家须要的json数据作为参数字传送入。所以jsonp是内需服务器端的页面实行对应的相称的。

 

复制代码 代码如下:

JSONP的缺点
只可以促成GET,未有POST;从任何域中加载的代码或许不安全;难以分明JSONP请求是或不是失利(XH奥迪Q伍有error事件),常见做法是运用沙漏钦点响应的允许时间,超过时间认为响应退步。COLANDS与JSONP的采用目标同样,但是比JSONP更有力,它援救具有品种的HTTP请求。JSONP的优势在于帮衬老式浏览器,以及能够向不援救CO智跑S的网址呼吁数据。

<?php
$callback = $_GET['callback'];//获得回调函数名
$data = array('a','b','c');//要赶回的数额
echo $callback.'('.json_encode($data).')';//输出
?>

肆 AJAX完毕跨域[参考2]

末尾,输出结果为:dosomething(['a','b','c']);

参考[2]中牵线了复杂HTTP请求,本文只蕴含轻易的GET和POST请求。
CORS,即Cross-Origin Resource Sharing(),跨域能源共享,定义了在必得跨域访问财富时,浏览器怎么样和服务器交互。基本观念正是运用自定义的HTTP尾部让浏览器和服务器进行沟通,从而决定响应的功成名就与战败。因而通晓XH冠道的跨域供给求询问HTTP头部。

假如您的页面使用jquery,那么通过它包裹的格局就能够很有利的来进展jsonp操作了。

4.1 HTTP header

复制代码 代码如下:

HTTP header分为请求底部和响应底部,在出殡和埋葬XH中华V请求时,会发送以下请求底部:
 Accept:浏览器能够管理的剧情类型。
 Accept-Charset:浏览器能够展现的字符集。
 Accept-Encoding:浏览器能够管理的压压缩编制码。
 Accept-Language:浏览器当前设置的言语。
 Connection:浏览器与服务器之间连接的项目。
 Cookie:当前页面设置的别的 库克ie。
 Host:发出请求的页面所在的域 。
 Referer:发出请求的页面包车型地铁 UPRADOI。注意, HTTP 标准将以此底部字段拼写错了,而为保证与行业内部一致,也只能将错就错了。(那一个英文单词的正确拼法应该是 referrer。)
 User-Agent:浏览器的用户代理字符串。
Content-Type:只限于四个值application/x-www-form-urlencoded、multipart/form-data、text/plain

<script type="text/javascript">
    $.getJSON('
        //管理得到的json数据
    });
</script>

 

jquery会自动生成多少个大局函数来替换callback=?中的问号,之后获得到数码后又会自行销毁,实际上就是起多个不常期理函数的遵循。$.getJSON方法会自动决断是不是跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的方式来调用jsonp的回调函数。

应用 setRequestHeader()方法能够安装自定义的呼吁底部音信。那一个点子接受七个参数:底部字段的名称和尾部字段的值。要成功发送请求底部音信,必须在调用 open()方法之后且调用 send()方法在此之前调用 setRequestHeader()。
request.open(“GET”, ““, true);
xhr.setRequestHeader(“MyHeader”, “MyValue”);
request.send(null);
服务器在收受到这种自定义的头顶消息之后,能够施行相应的接轨操作。

JSONP的利害

 

JSONP的亮点是:它不像XMLHttpRequest对象完结的Ajax请求那样受到同源攻略的限制;它的包容性更加好,在一发古老的浏览器中都能够运行,不要求XMLHttpRequest或ActiveX的支撑;并且在央浼完结后能够透过调用callback的法子回传结果。

调用 XH本田UR-V 对象的 getResponseHeader()方法并传播尾部字段名称,能够获取相应的响应尾部新闻。而调用 getAllResponseHeaders()方法则足以拿走多个包括全体尾部消息的长字符串,这种格式化的输出能够便宜大家检查响应中有着头部字段的名称。

JSONP的瑕疵则是:它只协理GET请求而不帮衬POST等别的连串的HTTP请求;它只协助跨域HTTP请求这种情况,不可能一蹴即至不一样域的多少个页面之间如何开始展览JavaScript调用的难题。

 

CROS和JSONP对比

测试实例:

CO奥迪Q7S与JSONP相比较,无疑进一步先进、方便和可信赖。

//创立请求对象
var request = createRequest();
if (request == null) {
alert(“Unable to create request”);
return;
}
request.onreadystatechange = showSchedule;
//使用DOM0级方法添加event handler,因为不是负有浏览器都扶助DOM2;未有event对象,直接采纳request对象
request.open(“GET”, selectedTab “.html”, true);//返回HTML片段
request.send(null);
}
function showSchedule() {
if (request.readyState == 4) {
if ((request.status >= 200 && request.status <= 300)|| request.status == 304) {
//重临响应底部
document.getElementById(“content”).innerHTML = request.getAllResponseHeaders();
}else
{
document.getElementById(“content”).innerHTML =request.status;
}
}
}

    一、 JSONP只可以促成GET请求,而COBMWX3S援救拥有品类的HTTP请求。

输出结果呈现全体的响应尾部:
last-modified: Tue, 11 Oct 2016 09:44:48 GMT content-type: application/x-javascript cache-control: max-age=2592000 expires: Thu, 10 Nov 2016 09:45:10 GMT

    2、 使用CO汉兰达S,开拓者可以利用普通的XMLHttpRequest发起呼吁和获取数量,比起JSONP有更加好的错误管理。

四.2 CO卡宴S 涉及的头顶

    叁、 JSONP首要被老的浏览器扶助,它们往往不帮助CO奇骏S,而超过三分之二今世浏览器都早就支撑了CO哈弗S)。
经过修改document.domain来跨子域

IE拾及以上、Firefox 3.5 、 Safari 四 、 Chrome、 iOS 版 Safari 和 Android 平新竹的 WebKit 都由此 XMLHttpRequest对象完毕了对 CORAV4S 的原生帮忙。只要在open()方法的UTucsonL中应用相对化定位就可以兑现COLX570S。一般推荐在同域中利用相对UCR-VL,在跨域时接纳相对化U奥迪Q5L。整个CO瑞虎S通讯进度,都以浏览器自动落成,无需用户参加。对于开荒者来讲,CO本田CR-VS通信与同源的AJAX通讯没相差非常大,代码一模一样。浏览器一旦开采AJAX请求跨源,就能活动抬高一些外加的头新闻,有时还恐怕会多出一回附加的呼吁,但用户不会有感到。由此,完毕CO奥迪Q五S通讯的根本是服务器。只要服务器达成了COBMWX三S接口,就足以跨源通讯。

浏览器都有一个同源攻略,其范围之一正是第三种方法中大家说的不可能经过ajax的方式去伏乞例外源中的文书档案。 它的第二个限制是浏览器中不一样域的框架之间是不能够实行js的互动操作的。
不等的框架之间是足以获取window对象的,但却无力回天获取相应的品质和方法。比方,有2个页面,它的地址是 , 在那一个页面里面有八个iframe,它的src是, 很彰着,那些页面与它里面包车型客车iframe框架是不相同域的,所以大家是无力回天通过在页面中书写js代码来获得iframe中的东西的:

 

复制代码 代码如下:

对于简易请求(GET和POST),浏览器直接产生COLacrosseS请求。具体来讲,正是在头消息之中,扩大二个Origin字段用来注脚:此次请求来自哪个源(协议

<script type="text/javascript">
    function test(){
        var iframe = document.getElementById('ifame');
        var win = document.contentWindow;//能够收获到iframe里的window对象,但该window对象的品质和办法大概是不可用的
        var doc = win.document;//这里获得不到iframe里的document对象
        var name = win.name;//这里同样获得不到window对象的name属性
    }
</script>
<iframe id = "iframe" src="" onload = "test()"></iframe>

  • 域名 端口)。服务器遵照这些值,决定是还是不是允许这一次请求。
    设若Origin钦点的源,不在许可范围内,服务器会重返1个常规的HTTP回应。浏览器发掘,这一个答复的头音信并未有包涵Access-Control-Allow-Origin字段(详见下文),就明白出错了,从而抛出一个谬误,被XMLHttpRequest的onerror回调函数捕获。注意,这种不当无法透过情景码识别,因为HTTP回应的状态码有非常大希望是200。
    1旦Origin钦点的域名在许可限制内,服务器再次来到的响应,会多出多少个头新闻字段,如下:

以此时候,document.domain就能够派上用场了,我们只要把 和 这一个页面的document.domain都设成一样的域名就足以了。但要注意的是,document.domain的设置是有限定的,大家不得不把document.domain设置成本人或越来越高一级的父域,且主域必须一律。

Access-Control-Allow-Origin: http://api.bob.com
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: FooBar
Content-Type: text/html; charset=utf-8

1.在页面 中设置document.domain:

地方的头新闻之中,有多个与COENCORES请求相关的字段,都以Access-Control-开始。详细解释如下:
(1)Access-Control-Allow-Origin
该字段是必须的。它的值要么是呼吁时Origin字段的值,要么是三个,表示接受肆意域名的伸手。
(2)Access-Control-Allow-Credentials
该字段可选。它的值是贰个布尔值,表示是还是不是同意发送Cookie。暗中认可意况下,库克ie不包涵在COCRUISERS请求之中。设为true,即表示服务器明显准予,Cookie能够涵盖在伸手中,一齐发给服务器。这些值也只能设为true,假使服务器不要浏览器发送Cookie,删除该字段就可以。
(3)Access-Control-Expose-Headers
该字段可选。CO汉兰达S请求时,XMLHttpRequest对象的getResponseHeader()方法只可以得到陆个核心字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。假使想获得别的字段,就无法不在Access-Control-Expose-Headers里面内定。上边的例证内定,getResponseHeader(‘FooBar’)能够回去FooBar字段的值。

复制代码 代码如下:

4.三 测试实例

<iframe id = "iframe" src="" onload = "test()"></iframe>
<script type="text/javascript">
    document.domain = 'example.com';//设置成主域
    function test(){
        alert(document.getElementById('iframe').contentWindow);//contentWindow 可获得子窗口的 window 对象
    }
</script>

把上例中的open()方法改成如下所示,U陆风X8L指向别的域中的二个JavaScript文件,测试结果声明能够成功加载该文件。
//测试文件在地头主机localhost上
request.open(“GET”, ““/*selectedTab

2.在页面 中也设置document.domain:

  • “.html”*/, true);

复制代码 代码如下:

 

<script type="text/javascript">
    document.domain = 'example.com';//在iframe载入那个页面也安装document.domain,使之与主页面包车型客车document.domain一样
</script>

接纳Fire福克斯的FireBug观看上述呼吁的响应进程,对应的请求尾部:Origin是http://localhost

修改document.domain的秘籍只适用于分化子域的框架间的相互。

 

你恐怕感兴趣的篇章:

  • 详解Javascript三种跨域方式总括
  • 商量跨域请求财富的三种格局(计算)
  • js前端化解跨域难点的八种方案(最新最全)
  • 左右逢原消除浏览器跨域的二种办法(汇总)

1呼百应尾部:access-control-allow-origin:代榜样性源都足以访问。

 

跨域使用的XH福睿斯对象能够访问status和statusText属性,而且帮忙同步请求,尽管那没多大用处。限制是不可能应用 setRequestHeader()设置自定义底部;不可能发送和接到 cookie;调用 getAllResponseHeaders()方法总会回来空字符串。

5 特殊的IE: XD帕杰罗对象达成跨域

对于XHQashqai2,IE浏览器的支撑是IE拾之上。但是IE早在IE八时就推出了 XDomainRequest 对象开始展览跨域操作,一贯沿用到IE10才被代表掉。由此在IE八,IE九中应有利用 XDomainRequest(XDCR-V)来兑现。XDENCORE有以下几性情情:
①)cookie 不会随请求发送,也不会随响应重临。(和跨域XH哈弗相同)
二)只好设置请求尾部消息中的 Content-Type 字段。
3)不能够访问响应底部音信。(和跨域XHLAND同样)
4)只支持 GET 和 POST 请求。

 

XD奥迪Q7 对象的运用办法与 XH中华V 对象特别相似,也是成立多个 XDomainRequest 的实例,调用 open()方法,再调用 send()方法。但与 XH哈弗 对象的 open()方法差异, XD宝马X伍 对象的 open()方法只接受四个参数:请求的项目和 USportageL。
富有 XD福睿斯请求都以异步奉行的,不能够用它来成立同步请求(和XHCRUISER差别同)。请求再次回到之后,会触发 load 事件(和XHR同),假设失败(蕴涵响应中缺失Access-Control-Allow-Origin 底部)就能触发 error 事件。响应的多寡也会保留在 responseText 属性中。

var xdr = new XDomainRequest();
xdr.onload = function(){
alert(xdr.responseText);
};
xdr.open(“get”, ““);
xdr.send(null);

在央求重回前调用 abort()方法能够告1段落请求:

xdr.abort(); //终止请求

与 XH纳瓦拉 同样, XD纳瓦拉 对象也支撑 timeout 属性以及 ontimeout 事件管理程序。
为永葆 POST 请求, XD奥迪Q伍 对象提供了 contentType 属性,用来代表发送数据的格式。该属性能够影响底部音信,在open()之后,send()从前使用。那个特性是因而XD哈弗 对象影响底部新闻的天下无双办法。

陆 跨浏览器的跨域化解方案

不畏浏览器对 COPRADOS 的支撑程度并不都同样,但有所浏览器都支持简单的(非 Preflight 和不带凭据的)请求,因而有须求实现三个跨浏览器的方案。检查实验 XHPRADO是或不是援助 CO昂科雷S 的最轻便易行方法,便是检查是否存在 withCredentials 属性。再结合检验 XDomainRequest 对象是还是不是留存,就足以兼顾全数浏览器了。

function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if (“withCredentials” in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != “undefined”){
vxhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}

Firefox、 Safari 和 Chrome 中的 XMLHttpRequest 对象与 IE 中的 XDomainRequest 对象类似,都提供了1道的习性/方法如下:
 abort():用于甘休正在进行的请求。
 onerror:用于取代 onreadystatechange 检查评定错误。
 onload:用于取代 onreadystatechange 检查实验成功。
 responseText:用于获取响应内容。
 send():用于发送请求。
如上成员都包含在 createCO昂CoraSRequest()函数重回的靶子中,在颇具浏览器中都能健康使用。

var request = createCORSRequest(“get”, ““);
if (request){
request.onload = function(){
//对 request.responseText 进行拍卖
};
request.send();
}

转发小说,原来的书文地址:

本文由澳门新浦京娱乐场网站发布于新浦京娱乐场官网,转载请注明出处:澳门新浦京娱乐场网站浅谈跨域以WebService对跨域