国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

AJAX學習筆記2:XHR實現跨域資源共享(CORS)以及和JSONP的對比

makeFoxPlay / 2045人閱讀

摘要:補充同源策略還應該對一些特殊情況做處理,比如限制協議下腳本的訪問權限。注意,該請求的查詢字符串有一個參數,用來指定回調函數的名字,這對于是必需的。

1 前言:

首先對參考文章作者表示感謝,你們的經驗總結給我們這些新手提供了太多資源。
本文致力于解決AJAX的CORS問題,我在邏輯上進行了梳理:首先,系統的總結了CORS問題的起源---同源策略;其次,介紹JSONP這種僅能支持GET請求的跨域方式和CORS作對比;最后,闡述CORS的XHR解決方式和IE中的XDR解決方式,在此基礎上提供了工具函數進行跨瀏覽器的HTTP請求對象創建。


2 跨域問題的源頭---同源策略

在客戶端編程語言中,如javascript和 ActionScript,同源策略是一個很重要的安全理念,它的目的是為了保證用戶信息的安全,防止惡意的網站竊取數據。
設想這樣一種情況:A網站是一家銀行,用戶登錄以后,又去瀏覽其他網站。如果其他網站可以讀取A網站的 Cookie,會發生什么?

很顯然,如果 Cookie 包含隱私(比如存款總額),這些信息就會泄漏。更可怕的是,Cookie 往往用來保存用戶的登錄狀態,如果用戶沒有退出登錄,其他網站就可以冒充用戶,為所欲為。因為瀏覽器同時還規定,提交表單不受同源政策的限制。由此可見,"同源政策"是必需的,否則 Cookie 可以共享,互聯網就毫無安全可言了。

那么什么叫相同域(同源),什么叫不同的域(不同源)呢?當兩個域具有相同的協議(如http), 相同的端口(如80),相同的host(如www.example.org),那么我們就可以認為它們是相同的域。比如 http://www.example.org/index....(默認端口號80可以省略)和http://www.example.org/sub/in...是同域,而http://www.example.org, https://www.example.org, http://www.example.org:8080, http://sub.example.org中的任何兩個都將構成跨域。
注意:只有協議、域名、端口號完全一樣才是同一域,其他情況,即使是相對應的IP和域名也是不同域,具體情況如下圖:

(這個圖片忘了從哪里引得了,感謝作者)

目前,如果非同源,共有三種行為受到限制。

(1) Cookie、LocalStorage 和 IndexDB 無法讀取。
(2) DOM 無法獲得。
(3) AJAX 請求不能發送。

作為前端開發者,我們很多時候要做的是突破這種限制。

補充:同源策略還應該對一些特殊情況做處理,比如限制file協議下腳本的訪問權限。本地的HTML文件在瀏覽器中是通過file協議打開的,如果腳本能通過file協議訪問到硬盤上其它任意文件,就會出現安全隱患,目前IE8還有這樣的隱患。

3 跨域方式JSONP[參考1]

JSONP是JSON with Padding的簡寫,是應用JSON實現服務器與客戶端跨源通信的常用方法。最大特點就是簡單適用,老式瀏覽器全部支持,服務器改造非常小。

它的基本思想是,網頁通過添加一個

閱讀需要支付1元查看
<