<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                我們知道瀏覽器的主要工作是把HTML、JavaScript等文件從服務器端取下來,然后解析、渲染,展示給人類。 同時瀏覽器還需要保存cookie,網站會把cookie發給瀏覽器,等到訪問同一個網站的時候,會把cookie發過去 。這個Cookie的作用是用來證明用戶已經與服務器交互過了,更重要的是證明已經登錄過系統了。 JavaScript的主要作用是對DOM樹修改,已經利用AJAX訪問服務器端 但是安全的問題還沒有解決。 ## 跨域訪問 有一天,用戶登錄了icbc網站,網站回復了一個Cookie ,證明用戶登錄過。 但是用戶忘了退出,又登錄了一個釣魚網站。 釣魚網站居然想訪問icbc的Cookie。 按照道理來說Cookie不能隨便給別人,因為這樣的話,黑客不用登錄就可以冒充用戶在icbc上做操作了。 ## iframe 現在瀏覽器已經很小心,不會把別的網站的cookie發給JavaScript了。 但是釣魚網站改變了策略,它用iframe放置了一個淘寶的登錄頁面 用戶一不小心輸入了自己的用戶名和密碼。這樣的用戶名和密碼就被提交到了釣魚網站中。 ![](http://p8a6vmhkm.bkt.clouddn.com/img/20181029151043.png?imageslim) ## 同源 雖然瀏覽器控制不了人類的行為,但是可以讓瀏覽器增加安全性。 于是,所有瀏覽器增加了一條鐵規: **除非兩個網頁是來自于統一源頭,否則不允許一個網頁的JavaScript訪問另一個網頁的內容,比如Cookie,DOM等** 也就是如果兩個網頁不同源,就被隔離了。 那什么叫同一個**源頭**? 也就是說`{protocol , host , port}`必須一樣。 比如說有這么一個網頁: http://www.store.com/product/page.html, 下面的表格列出了各種不同情況。” ![](http://p8a6vmhkm.bkt.clouddn.com/img/20181029151521.png?imageslim) 但是問題又來了。 比如說http://www.store.com/ ,這個頁面有一段裝載的jquery.js的代碼: ``` <script src="//static.store.com/jquery.js > ``` 這個 jquery.js 是來自于不同的源(**static**.store.com), 難道他就沒法操作 www.store.com 頁面的內容了嗎? 如果不能操作,這個 jquery.js 就沒有任何用處了。 所以可以開個口子,對于使用使用 < script src='xxxxx'> 加載的 JavaScript,我們認為它的源屬于 www.store.com, 而不屬于 static.store.com,這樣就可以操作 www.store.com 的頁面了 其實這種 “嵌入式” 的跨域加載資源的方式還有 <img>,<link> 等,相當于瀏覽器發起了一次 GET 請求,取到相關資源,然后放到本地而已。 ## 分布式 隨著網絡流量增加,大部分系統都拆分成分布式的,每個系統都有子域名,像 login.store.com, payment.store.com ,雖然二級域名不同,但是他們屬于一個大的系統,但是由于同源策略的鐵規,cookie不能在每個系統之間共享。 那么只能再開一個口子,如果兩個網頁的一級域名是相同的,他們可以共享 cookie, 不過 cookie 的 domain 一定要設置為那個一級域名才可以,例如:`document.cookie = 'test=true;path=/;domain=store.com'` ## AJAX 我們知道javaScript可以創建一個XMLHttpRequest對象去異步訪問服務器端提供的服務,做到局部刷新頁面。 但是這個 XMLHttpRequest 對象只能訪問源服務器(如 book.com),不能訪問其他服務器 (如 beauty.com)? ![](http://p8a6vmhkm.bkt.clouddn.com/img/20181029152331.png?imageslim) 那怎么辦? 可以通過**服務器中轉** 可以通過服務器端中轉啊,例如你是來自 book.com 的, 現在想訪問 movie.com,那可以讓那個 book.com 把請求轉發給 movie.com ,這就是代理 ![](http://p8a6vmhkm.bkt.clouddn.com/img/20181029152600.png?imageslim) 但是如果瀏覽器要訪問多個不同源的系統,要是都通過 book.com 中轉,該多麻煩!” 既然服務器(domain)之間是互信的,那一個服務器 (domain) 可以設置一個白名單,里邊列出它允許哪些服務器 (domain) 的 AJAX 請求。 假設 movie.com 的白名單中有 book.com, 那當屬于 book.com 的 JavaScript 試圖訪問 movie.com 的時候,瀏覽器做點手腳,悄悄地把當前的源 (book.com) 發過去,詢問下 movie.com, 看看他是否允許瀏覽器訪問,如何允許,就繼續訪問,否則就報錯! ![](http://p8a6vmhkm.bkt.clouddn.com/img/20181029152748.png?imageslim) 這樣以來,那些黑客就沒有辦法假冒用戶向這些互信的服務器發送請求了, 我把這個方法叫做 Cross Origin Resource Sharing,簡稱** CORS**,只不過這個方法需要服務器的配合了”
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看