成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

AJAX學(xué)習(xí)筆記2:XHR實(shí)現(xiàn)跨域資源共享(CORS)以及和JSONP的對(duì)比

QiuyueZhong / 2741人閱讀

摘要:補(bǔ)充同源策略還應(yīng)該對(duì)一些特殊情況做處理,比如限制協(xié)議下腳本的訪問權(quán)限。注意,該請(qǐng)求的查詢字符串有一個(gè)參數(shù),用來(lái)指定回調(diào)函數(shù)的名字,這對(duì)于是必需的。

1 前言:

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

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

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

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

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

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

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

(1) Cookie、LocalStorage 和 IndexDB 無(wú)法讀取。
(2) DOM 無(wú)法獲得。
(3) AJAX 請(qǐng)求不能發(fā)送。

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

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

3 跨域方式JSONP[參考1]

JSONP是JSON with Padding的簡(jiǎn)寫,是應(yīng)用JSON實(shí)現(xiàn)服務(wù)器與客戶端跨源通信的常用方法。最大特點(diǎn)就是簡(jiǎn)單適用,老式瀏覽器全部支持,服務(wù)器改造非常小。

它的基本思想是,網(wǎng)頁(yè)通過添加一個(gè)

閱讀需要支付1元查看
<