深入剖析jsonp跨域原理
專案中遇到一個jsonp跨域的問題,於是仔細的研究了一番jsonp跨域的原理。搞明白了一些以前不是很懂的地方,比如:
1)jsonp跨域只能是get請求,而不能是post請求;
2)jsonp跨域的原理到底是什麼;
3)除了jsonp跨域之外還有那些方法繞過“同源策略”,實現跨域訪問;
4)jsonp和ajax,或者說jsonp和XMLHttpRequest是什麼關係;
等等。
1.同源策略
說到跨域,首先要明白“同源策略”。同源是指:js指令碼只能訪問或者請求相同協議,相同domain(網址/ip),相同埠的頁面。
我們知道,js指令碼可以訪問所在頁面的所有元素。通過ajax技術,js也可以訪問同一協議,同一個domain(ip),同一埠的伺服器上的其他頁面,請求到瀏覽器端之後,利用js就可以進行任意的訪問。但是對於協議不同, 或者domain不同或者埠不同的伺服器上的頁面就無能為力了,完全不能進行請求。
下面在本地搭建兩個tomcat,分別將埠設為8080,和8888,進行相關實驗。顯然他們的埠是不同的。演示如下:
http://localhost:8888/html4/ajax.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 |
<!
doctype
html>
<
html
>
<
head
>
<
meta
charset="utf-8">
<
meta
name="keywords" content="jsonp">
<
meta
name="description" content="jsonp">
<
title
>jsonp</
title
>
<
style
type="text/css">
|