javascript
跨域访问-JSONP
JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允許請求當前源(域名、協議、端口)的資源。如果要進行跨域請求,我們可以通過使用 html的script標記來進行跨域請求,并在響應中返回要執行的script代碼,其中可以直接使用JSON傳遞javascript對象。這種跨域的通訊方式稱為JSONP。
?
JSONP的優點是:它不像XMLHttpRequest對象實現的Ajax請求那樣受到同源策略的限制;它的兼容性更好,在更加古老的瀏覽器中都可以運行,不需要XMLHttpRequest或ActiveX的支持;并且在請求完畢后可以通過調用callback的方式回傳結果。
JSONP的缺點則是:它只支持GET請求而不支持POST等其它類型的HTTP請求;它只支持跨域HTTP請求這種情況,不能解決不同域的兩個頁面之間如何進行JavaScript調用的問題。
?
JSONP的好處就是能夠很好的解決跨域請求的問題,但是也有一些不足之處:
-
請求的狀態不夠豐富,我們只能偵聽請求成功時的狀態,如果請求失敗,我們無法通過一個狀態碼知曉,所以如果請求失敗的話,沒有任何反饋給用戶,可能會造成用戶的困惑。
-
由于script標簽不受同源的限制,同時也造成了一些安全性的問題
使用遠端網站的 script 標簽會讓遠端網站得以注入任何的內容至網站里。如果遠端的網站有 JavaScript 注入漏洞,原來的網站也會受到影響。
現在有一個正在進行計劃在定義所謂的 JSON-P 嚴格安全子集,使瀏覽器可以對 MIME 類別是“application/json-p”請求做強制處理。如果回應不能被解析為嚴格的 JSON-P,瀏覽器可以丟出一個錯誤或忽略整個回應。
比較一下json與jsonp格式的區別:
json格式:
{"message":"獲取成功","state":"1","result":{"name":"工作組1","id":1,"description":"11"} }jsonp格式:
callback({"message":"獲取成功","state":"1","result":{"name":"工作組1","id":1,"description":"11"} })看出來區別了吧,在url中callback傳到后臺的參數是神馬callback就是神馬,jsonp比json外面有多了一層,callback()。這樣就知道怎么處理它了。于是修改后臺代碼。
?
其他資料:
http://kb.cnblogs.com/page/139725/
http://www.cnblogs.com/sunxucool/p/3433992.html
轉載于:https://www.cnblogs.com/tianma3798/p/5091984.html
總結
以上是生活随笔為你收集整理的跨域访问-JSONP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVa1607 poj1435 UVaL
- 下一篇: 转帖不会乱码的,powershell网络