同源策略

 

  同源是指:協議、域名、端口 三者相同,三者相同,則稱爲在同一個域中。web

  一個域內的腳本僅僅具備本域內的權限,能夠理解爲本域腳本只能讀寫本域內的資源,而沒法訪問其它域的資源。現代瀏覽器在安全性和可用性之間選擇了一個平衡點。在遵循同源策略的基礎上,選擇性地爲同源策略「開放了後門」,如script、img、link等容許跨域訪問資源,容許這些資源能夠部署在其餘服務器上,從而下降服務器的壓力。ajax

同源限制最經常使用的體如今:後端

  Cookie:瀏覽器發起的請求只能帶本域下的cookie;若是沒有這個限制,cookie至關於暴露在全部網站下,全部人均可以讀取。跨域

  DOM:不容許經過iframe來加載其餘域下的頁面;由於父頁面能夠獲取到iframe中的dom,從而獲取到裏面用戶信息,不安全。瀏覽器

  Ajax:不容許經過ajax來跨域請求資源安全

  localStorage:不容許跨域訪問別人localStorage服務器

CORS

  啓用CORS支持可使AJAX跨域請求,不過須要另外一個域的後端作一些相應配合才能夠。接下來演示一下AJAX跨域錯誤以及如何啓用CORS(goLang後端):cookie

一個簡單的服務器,監聽了19090端口,對請求迴應一個簡單的字符串:dom

如下客戶端代碼去請求上面的接口。頁面運行在webstorm server 63342端口中,二者端口不一樣,屬於跨域。webstorm

運行報錯:

可是響應中的確有咱們想要的數據:

可見,服務器已經針對咱們的請求做出了響應,只不過被瀏覽器給攔截了。解決辦法就是在服務器中添加一個響應頭,把服務器中這句代碼打開:

 

以上至關於配置一個白名單,容許這個域下進行跨域請求,讓瀏覽器不要去攔截個人響應。從新運行,能夠成功請求了。

跨域請求下的cookie操做

在服務器響應的同時,回寫一個cookie以及輸出請求中的cookie

運行以前的客戶端代碼,可見完成跨域請求後,瀏覽器的確收到了一個cookie

客戶端再執行相同的請求,發現服務器接受到的請求中,沒有帶上次的cookie。在客戶端請求時多加一句代碼:

再次請求,發現請求中已經有帶cookie了,並且服務器能夠接收到cookie了:

服務器響應後,瀏覽器再次報錯,看來響應又被攔截了

 須要在服務器多加一行代碼:

重啓服務器,一切都正常運行了,跨域請求能夠帶上cookie了,並且當前腳本能夠獲取那個域下的cookie了:

相關文章
相關標籤/搜索