一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法

淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法

2020-09-09 12:57dongxie548 Java教程

由于同源策略的緣故,ajax不能向不同域的網站發出請求。接下來通過本文給大家介紹jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法,需要的朋友可以參考下

由于同源策略的緣故,ajax不能向不同域的網站發出請求。

比如a站localhost需要向b站請求數據,地址為:http://www.walk-sing.com/api.php

請求的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
<html>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script type="text/javascript">
 $.get("http://www.walk-sing.com/api.php", function(data){
   alert("Data Loaded: " + data);
  });
</script>
<body>
</body>
</html>

訪問該頁面,頁面空白,按F12打開控制臺,可以看到截圖所示信息:

淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法

解決方案1:jsonp

我們先來看這樣一個例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script type="text/javascript">
 function alertSomething(data){
  alert(data.name+data.age);
 }
 alertSomething(
   {"name":"ben","age":24}
   );
// $.get("http://www.walk-sing.com/api.php", function(data){
//  alert("Data Loaded: " + data);
//  });
</script>
<body>
</body>
</html>

執行結果:

淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法

我們也可以這樣寫:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script type="text/javascript">
 function alertSomething(data){
  alert(data.name+data.age);
 };
// $.get("http://www.walk-sing.com/api.php", function(data){
// alert("Data Loaded: " + data);
// });
</script>
<script type="text/javascript" src="alertsomething.js"></script>
<body>
</body>
</html>

alertsomething.js的內容如下:

?
1
2
3
alertSomething(
   {"name":"ben","age":24}
   );

也可以得到截圖所示結果。

我們再換一個方式,將alertsomething.js上傳到服務器,將代碼改為如下形式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script type="text/javascript">
 function alertSomething(data){
  alert(data.name+data.age);
 };
// $.get("http://www.walk-sing.com/api.php", function(data){
// alert("Data Loaded: " + data);
// });
</script>
<script type="text/javascript" src="http://www.walk-sing.com/alertsomething.js"></script>
<body>
</body>
</html>

也可以得到截圖所示結果。

不知道大家發現沒有,script標簽沒有同源策略的限制,jsonp正是基于此原理實現的。

jsonp的具體實現可參見如下代碼:

jsonp.php

?
1
2
3
4
5
6
7
8
9
10
<?php
$method = isset($_GET['callback']) ? $_GET['callback'] : '';
if(!isset($method)){
 exit('bad request');
}
$testArr = array(
 'name' => 'ben',
 'age' => 23
);
echo $method.'('.json_encode($testArr).')';

js代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script type="text/javascript">
 function alertSomething(data){
  alert(data.name+data.age);
 };
// $.get("http://www.walk-sing.com/api.php", function(data){
// alert("Data Loaded: " + data);
// });
</script>
<script type="text/javascript" src="http://www.walk-sing.com/jsonp.php?callback=alertSomething"></script>
<body>
</body>
</html>

也可以得到截圖所示結果。

解決方案二:CORS(跨域資源共享,Cross-Origin Resource Sharing)

不知道大家發現了沒有,jsonp只能發送get請求,而如果業務中需要用到post請求時,jsonp就無能為力了。

這時候cors(跨域資源共享,Cross-Origin Resource Sharing)就派上用處了。

CORS的原理:

CORS定義一種跨域訪問的機制,可以讓AJAX實現跨域訪問。CORS 允許一個域上的網絡應用向另一個域提交跨域 AJAX 請求。實現此功能非常簡單,只需由服務器發送一個響應標頭即可。
就拿前面第一個例子來說,我只要在api.php文件頭加上如下一句話即可:

?
1
header('access-control-allow-origin:*');

再次請求該接口,結果如下截圖所示:

淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法

以上所述是小編給大家介紹的jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/u011250882/article/details/46946889

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人的私人影院 | 亚洲男1069gay男猛男 | 九九九九九九伊人 | 日韩欧美一区二区三区视频 | 国产女王女m视频vk 国产农村一级特黄α真人毛片 | 色碰视频 | 女人全身裸露无遮挡免费观看 | 国产视频一二三区 | 男女男精品网站免费观看 | 国产一区二区不卡 | 日本xxx在线观看免费播放 | porono日本动漫 | 国产99久久精品一区二区 | 大胸孕妇孕交pregnantsex 大象视频污 | 大伊香蕉精品二区视频在线 | 99热这里只有精品一区二区三区 | 国产精品久久久久毛片真精品 | 操大姨子逼| 日韩一级在线观看 | 肥胖老寡妇做性 | 色鬼网| 四虎免费入口 | 男女做受快插大片 | 91精品国产高清久久久久久91 | 国产无限免费观看黄网站 | 香蕉久久夜色精品国产小优 | 亚洲第一福利网 | 高清男的插曲女的 欢迎你老狼 | 国产精品欧美在线观看 | 男女操bb | 天天色视频| 99久久精品免费精品国产 | 国产99在线 | 亚洲国产成人精品激情 | 国产最强大片免费视频 | 国产成人高清精品免费观看 | 91高清在线视频 | 手机在线伦理片 | 高h肉厨房| 亚洲成人影院在线 | 天堂色 |