1. 程式人生 > >理解瀏覽器跨域

理解瀏覽器跨域

1.跨域是怎麼產生的?

瀏覽器的同源策略規定預設情況下,JavaScript在傳送AJAX請求時,URL的域名必須和當前頁面完全一致。

域名要相同(mp.csdn.com和mp.csdn2.com不同),協議要相同(httphttps不同),埠號要相同(80埠和:8080就不同).

同源策略的限制:cookie,localstorage,無法讀取  dom無法獲取 ajax無法傳送

2.為何會有同源策略呢?

   當然是為了保證使用者資訊的安全,防止惡意的網站竊取資料。

   1.對cookie的保護 ,   cookie 中存著sessionID 

這個sessionID的作用是什麼呢?在我們訪問一個網頁,登入後,我們可以在一段時間內訪問,編輯自己的個人資訊,而不是每次訪問都需要登入.如果你關閉瀏覽器,就需要重新登入,這就是sessionID在起作用.

網頁是基於Http協議進行解析的,而Http是無狀態協議。所謂的無狀態便是下一次訪問並不知道上一次訪問的情況,每訪問完一次後便斷開連線。那麼,伺服器是怎麼識別訪問的使用者身份的呢?這裡便運用到了Session和Cookie。瞭解過Session和Cookie的人都會知道,Session是儲存在伺服器端的,而Cookie是儲存在客戶端的,每次請求都會帶上cookie的資訊.開啟谷歌瀏覽器,F12除錯模式,站到Application,就能看到Cookies資訊.

試想一下,如果你支付寶的Cookies被你隨便訪問的一個網站獲取了,然後他就能各種操作.

3.如何跨域呢?

一是通過Flash外掛傳送HTTP請求,這種方式可以繞過瀏覽器的安全限制,但必須安裝Flash,並且跟Flash互動。不過Flash用起來麻煩,而且現在用得也越來越少了。

二是通過在同源域名下架設一個代理伺服器來轉發,JavaScript負責把請求傳送到代理伺服器,代理伺服器再把結果返回,這樣就遵守了瀏覽器的同源策略。這種方式麻煩之處在於需要伺服器端額外做開發。

第三種方式稱為JSONP,它有個限制,只能用GET請求,並且要求返回JavaScript。這種方式跨域實際上是利用了瀏覽器允許跨域引用JavaScript資源

<html>
<head>
    <script src="http://example.com/abc.js"></script>
    ...
</head>
<body>
...
</body>
</html>

第四種是設定自己的瀏覽器,允許跨域,這樣做的風險是自己的瀏覽器會面臨不安全的風險,也只適用於自己除錯,一般會用一個沒有敏感資訊的瀏覽器去設定這種不安全模式.