Ajax跨域問題

最近接觸到關於ajax的跨域問題,做個簡單小結。

  • 首先了解一下什麼是跨域?

跨域就是從一個域名的網頁去請求另一個域名的資源。舉個例子,當前所在網頁的網址是 http://localhost:8080/web/w.html ,想跑去請求 http://www.baidu.com 的資源,明顯看出這兩個網址的域名不同,端口不同,這波操作就是跨域。然而瀏覽器是存在同源策略這個機制的,就算強行這波操作最後只能say sorry。好啦,這裏又牽扯到一個同源策略,這個同源策略呢是瀏覽器爲安全性考慮而實施的重要策略,禁止執行與自身來源不同的域的任何腳本。但是,請看小標題,同源問題是針對ajax的,HTML本身沒有跨域問題,擁有src屬性的標籤都擁有跨域的能力,比如<script>,<img>。

  • 解決ajax跨域問題

這裏以商城項目爲例,前臺工程通過ajax發送請求到後臺工程,想向後臺獲取數據,這時就遇到了ajax跨域問題,這個時候,不要慌,去百度,我也是借鑑大神們的解決方案。
方法一:直接訪問本工程的controller,再去controller中調用接口返回數據。(依據情況實現)
方法二:從HTML5下手,通過進行配置,屏蔽掉同源策略,比如添加允許跨域的響應頭等,詳情請參考百度。
方法三:jsonp,是一種可以繞過瀏覽器的安全限制,從不同的域請求數據的方法

  • jsonp

web頁面調用js文件是不在跨域範圍內,回想一下,我們在使用插件時,是不是都要先引入相應的js。因此,要想跨域訪問數據,必須想方設法把數據裝進js格式文件裏。

<script src="請求的url"></script>
JSON的純字符數據格式可以簡潔的描述複雜數據,被js原生支持,所以在web客戶端通過與調用腳本一模一樣的方式,來調用跨域服務器上動態生成的js格式文件(一般以JSON爲後綴),顯而易見,服務器之所以要動態生成JSON文件,目的就在於把客戶端需要的數據裝入進去。爲了便於客戶端使用數據,逐漸形成了一種非正式傳輸協議,人們把它稱作JSONP。該協議的一個要點就是允許用戶傳遞一個callback參數給服務端,然後服務端返回數據時會將這個callback參數作爲函數名來包裹住JSON數據,這樣客戶端就可以隨意定製自己的函數來自動處理返回數據了。(來源:點擊打開鏈接


jsonp正是利用這一漏洞達到跨域訪問數據

$(function(){
$.ajax({
url:"請求的URL",
type:"GET",
dataType:"jsonp"
});
});

function callback(data){
alert(data);
}

小編只是知識點搬運工,不足之處請諒解。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章