jquery中ajax處理跨域的兩種解決方案
1、jsonp
jsonp(json with padding)是json的一種」使用模式」,可用於解決主流瀏覽器的跨域資料訪問的問題。
jsonp的原理是動態新增乙個標籤,而script標籤的src屬性是沒有跨域的限制的。這樣說來,這種跨域方式其實與ajax xmlhttprequest協議無關了。
實踐應用 --
ajax請求**:
上述**,發出的請求位址大概為:為隨機生成的字串,不用關心其值)
ajax傳送請求時,需要在客戶端註冊乙個callback(如:jsonpcallback), 然後把callback的名字(如:jquery111111)傳給伺服器。
注意:服務端得到callback的數值後,要用jquery111111(...)把將要輸出的json內容包括起來,此時,伺服器生成 json 資料才能被客戶端正確接收。
也就是說,介面返回的資料,需要拼接上callback的值,上面**,通過jsonp設定引數名,設定了jsonpcallback
那麼,介面需要接收jsonpcallback的值,並拼接上返回的資料,格式:
jsonpcallback+ "("+data+")"
2、cors(跨域資源共享)
這個方案實現起來非常簡單,只需由伺服器傳送乙個響應標頭即可
response.setheader("access-control-allow-origin","
*")
「*」號表示允許任何域向我們的服務端提交請求
也可以設定指定允許訪問的網域名稱,如網域名稱
response.setheader("access-control-allow-origin","
") 如圖,在服務端設定了乙個響應標頭允許所有資源訪問之後,8968埠也能訪問到8112埠的介面了。
對比jsonp與cors
cors與jsonp相比,更為先進、方便和可靠。
jsonp只能實現get請求,而cors支援所有型別的http請求。
使用cors,開發者可以使用普通的xmlhttprequest發起請求和獲得資料,比起jsonp有更好的錯誤處理。
cors瀏覽器支援情況:
Ajax跨域請求
一 什麼是跨域請求 網域名稱它由http 協議 www 子網域名稱 baidu 主網域名稱 以及8080 埠號 組成,當另乙個網域名稱與其中任意一項對應不等的話,那麼我們說兩個網域名稱就是跨域的。如的頁面上我們要請求資料到上去,那麼就說這種請求是跨域請求。二 為什麼要講跨域請求 因為在一般的請求條件...
Ajax 跨域請求
隨筆 71 文章 0 客戶端js 服務端 1 string callbackfunname context.request callbackparam 2 context.response.write callbackfunname ps 客戶端的jsonp引數是用來通過url傳參,傳遞jsonpc...
ajax跨域請求
通過xhr實現ajax通訊的乙個主要的限制,於跨域安全策略。在預設情況下,xhr物件只能訪問與包含它的頁面位於同乙個域中的資源。這樣可以防止一些惡意行為。所謂的域,可以理解成網域名稱,如果這個xhr所在的頁面與請求的介面是在同乙個應用下面,那麼就不存在跨域的問題,它們是在同乙個域下面,例如這裡都在本...