天天看點

同源政策(未完成).md

同源政策

怎樣才算同源?

簡單來說:協定相同、域名相同、端口相同則稱為同源

協定

  • TCP協定

    是基于連接配接的協定,也就是說,在正式收發資料前,必須和對方建立可靠的連接配接。

  • UDP協定

    它是一個“非連接配接”協定。就是在正式通信前不必與對方先建立連接配接,不管對方狀态就直接發送,而且發送了之後不管對方是否接受到(即隻管發送,發了不管)

端口

  • http協定的端口預設為80;https預設為443。如果不采用預設端口,那麼在通路時需要在域名後加上端口号
  • 什麼是端口

    當目的主機接受到資料後,将根據封包首部目的的端口号,把資料發送到相應端口,同時,端口相應的程序會領取資料并且等下一組資料的到來。當然發送資料時也需要啟動端口,這樣,資料包将會辨別有源端口(即域名确定的是主機的位置,而端口确定了資料發給主機中的什麼地方[或者說哪個程式])

域名

www.baidu.com中,baidu.com是一級域名,www.baidu.com是二級域名

二級、三級,…域名不同也不算同源

同源究竟是怎麼回事?

對于這個問題!網上的部落格千篇一律!但是在百度百科上搜尋了以下,然後再由于一個小想法,無意中讓我明白了這個讓我百思不得姐的同源政策的更深層含義:

首先明白以下幾點:

  • 同源政策(Same origin policy)是一種約定,它是浏覽器最核心也最基本的安全功能。浏覽器是針對同源政策的一種實作——也就是說:同源政策是針對于浏覽器的,限制的是浏覽器
  • 下面再看一個栗子(具體代碼就不寫了,你可以親自試一下):我們通過原生Ajax去請求百度搜尋框的url,你會發現控制台報錯了!(由于Ajax受同源政策的限制,當然會報錯)
同源政策(未完成).md

但是,我們再看響應,你會發現本次請求雖然跨域了,但是依然成功的請求到了資料:

同源政策(未完成).md

是以通過上述實驗,我們便能總結出同源政策更深層的含義(或者說是本質——還是别這麼說,這隻是皮毛層面的了解,隻是為了好表述而已):

同源政策限制的是浏覽器,即限制的是浏覽器是否允許來自不同源的内容在本頁面中使用,而并不是限制浏覽器不能擷取不同源的資料。再說的簡明點就是——在同源政策的限制下,雖然你的請求跨域了,但是資料依然能擷取到,隻是由于同源政策的限制,浏覽器不允許使用擷取到的資料!再再說的簡明點就是——同源政策限制的是浏覽器是否允許使用來自不同源的資料,而與‘浏覽器能否擷取到另一個源中的資料’并無關系