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

資訊專欄INFORMATION COLUMN

再也不學(xué)AJAX了!(三)跨域獲取資源 ② - JSONP & CORS

enda / 3040人閱讀

摘要:瀏覽器的同源策略固然保障了互聯(lián)網(wǎng)世界的數(shù)據(jù)隱私與數(shù)據(jù)安全,但是如果當我們需要使用跨域請求資源時,同源策略又會成為開發(fā)者的阻礙。我們之前提到過,如果想要繞過瀏覽器同源策略,實現(xiàn)使用技術(shù)跨域獲取資源,需要服務(wù)端和客戶端的協(xié)同合作。

瀏覽器的“同源策略”固然保障了互聯(lián)網(wǎng)世界的數(shù)據(jù)隱私與數(shù)據(jù)安全,但是如果當我們需要使用AJAX跨域請求資源時,“同源策略”又會成為開發(fā)者的阻礙。在本文中,我們會簡單介紹需要跨域請求資源的兩種情景,然后,詳細解釋目前主流的四種跨域請求資源方案。

讓我們開始吧!

一、何時需要跨域

試想,當我們擁有多個站點,并且這些站點又經(jīng)常共享相同的數(shù)據(jù),那么為每個站點存儲一份數(shù)據(jù)看起來就蠢透了。更好的方案是,我們建設(shè)一臺靜態(tài)資源存儲服務(wù)器,然后讓我們的所有站點都從這一臺服務(wù)器上獲取資源。很理想的方案,但是現(xiàn)實中,我們首要解決的問題便是瀏覽器的“同源策略”,別忘了,不同域之間無法通過AJAX技術(shù)獲取資源。這是需要跨域獲取資源的主要情景。

另外,站在互聯(lián)網(wǎng)“開放,平等,自由”精神的角度上講,如果所有人的數(shù)據(jù)都被設(shè)置為只有同域才能訪問,那么互聯(lián)網(wǎng)世界未免也太無聊了,如果我就是想要與更多的人分享我的數(shù)據(jù),難道不應(yīng)該有辦法讓我做到這一點嗎?

當然有辦法,下面我們就將一一解釋當下主流的跨域請求資源方式。

二、跨域請求資源方案

我們將主要介紹以下四種跨域請求資源的方案,并逐一解釋他們的原理,實用方式以及優(yōu)缺點,希望你和我一樣有耐心,耐心總是能帶來回報:

野路子出身卻好用的方式:JSONP;

官方推薦的跨域資源共享方案:CORS;

使用HTML5 API:postMessage;

拋棄HTTP,使用:Web Sockets;

在開始下面的內(nèi)容之前,我們首先需要強調(diào)一點,無論是怎樣的跨域資源獲取方案,本質(zhì)上都需要服務(wù)器端的支持。跨域獲取資源之所以能夠成功,本質(zhì)是服務(wù)器默許了你有權(quán)限獲取相應(yīng)資源。下面我們所運用的種種方式,實際上是客戶端和服務(wù)端互相配合,繞過同源策略進行數(shù)據(jù)交互的工作,千萬不要誤以為掌握了下述技術(shù)后,我們就能成為一個黑客 ???♂?。

(一)野路子出身卻異常好用的方式:JSONP

正如標題所描述的那樣,JSONP技術(shù)是早期某個(些?)聰明的程序員發(fā)明的跨域資源獲取方式,由于該技術(shù)的簡單易用,逐漸變得越來越流行,最終成為經(jīng)典的跨域獲取資源方案。

JSONP是“JSON with padding”的簡寫,我將其翻譯為“被包裹的JSON”,當你看完這個章節(jié),你一定會覺得這個名字相當貼切。

讓我們模擬一下當初想到JSONP技術(shù)的高手程序員是如何推理的:

首先,我們應(yīng)該清楚的認識到,瀏覽器的“同源策略”只是阻止了通過AJAX技術(shù)跨域獲取資源,而并沒有禁止跨域獲取資源這件事本身,正因如此,我們可以通過標簽,標簽以及

這意味著什么呢?這意味著被加載的文件與HTML文件下的其他JS文件共享一個全局作用域。也就是說,標簽加載到的資源是可以被全局作用域下的函數(shù)所使用的!

但是慢著!如果

閱讀需要支付1元查看
<