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

資訊專欄INFORMATION COLUMN

HTML5跨域開發(fā)

xiaolinbang / 395人閱讀

摘要:默認(rèn)情況下,跨域請求發(fā)起時候不包含,需要我們主動將的屬性設(shè)為才行。出現(xiàn)錯誤時,會返回完整的棧,有利排查。不然如果出現(xiàn)錯,響應(yīng)頭不包含這兩個跨域標(biāo)記,就會理所當(dāng)然地不顯示返回內(nèi)容,也就無法看到錯誤描述,根本無法排查。

  

首發(fā)我的博客

HTML5中提供了跨域加載數(shù)據(jù)的方法,讓我們得以從JSONP或者Flash中介等各種繞行方案中解脫出來,更加順暢地與服務(wù)器交流。另一方面,因?yàn)镻HP是最好的語言……所以在它與Node.js之間,我選擇前者作為后端語言開發(fā)內(nèi)容服務(wù)。

這篇文章記錄使用jQuery+PHP開發(fā)跨域應(yīng)用時的小心得。

身份驗(yàn)證

做身份驗(yàn)證,最簡單的辦法就是使用PHP的SESSION保存用戶信息,于是就要用到Cookie。默認(rèn)情況下,跨域Ajax請求發(fā)起時候不包含Cookie,需要我們主動將XHRwithCredentials屬性設(shè)為true才行。

jQuery會把XHR封裝成jqXHR,并且不暴露真正的XHR(說實(shí)話這點(diǎn)有點(diǎn)難以理解,尤其是在做上傳進(jìn)度條的時候)。然后它提供一個給真正XHR賦值的接口xhrField,所以寫成代碼就是這樣事兒的:

$.ajax(url, {
  xhrField: {
    withCredentials: true
  }
}
各種HTTP頭

如果不需要驗(yàn)證用戶身份,直接在HTTP頭中輸出Access-Control-Allow-Origin: *即可。

我的產(chǎn)品需要驗(yàn)證,那么首先,HTTP頭中必須有Access-Control-Allow-Credentials: true;此時對域的限制也嚴(yán)格許多,不再允許像前面那樣使用*放開給任何來源,必須指明哪個具體域可以接受。

關(guān)于Access-Control-Allow-Origin的值,規(guī)范中的說明是“域名列表或null”,然則接下來的“注意”有點(diǎn)詭異:“實(shí)際生產(chǎn)中,‘列表或null’要求更嚴(yán)格。你可以認(rèn)為它實(shí)際只允許單一域名或null,而非空格分隔的域名列表?!薄热蝗绱四愀纱鄬憘€“域名或null”不就完了……

總之對于我們而言,返回的HTTP頭中還要包含Access-Control-Allow-Origin: http://域名,指定允許作為來源的協(xié)議、域名、端口,并且只能有一個(組)。因?yàn)橥ǔ碚f我們開發(fā)環(huán)境和生產(chǎn)環(huán)境不一樣,所以這里的域名最好不要寫在服務(wù)器配置里;使用PHP,通過$_SERVER["HTTP_ORIGIN"]取出訪問來源,與白名單比對,通過后再輸出相應(yīng)的頭,更加合適。

調(diào)試

我選擇JSON作為前后端交流的格式。為了方便瀏覽器解析(也是HTML5的要求),我還返回了Content-type: application/json頭。

使用PHP少不了使用Xdebug。出現(xiàn)錯誤時,Xdebug會返回完整的棧,有利排查。但是為了方便閱讀,Xdebug還會給返回信息套上

結(jié)構(gòu),這時Chrome的Network工具就會把它解析成奇怪的格式,所以Content-type一定要最后和數(shù)據(jù)一起返回。

與之相反的是前文說到的Access-Control-Allow-OriginAccess-Control-Allow-Credentials,這二位必須放在最前面。不然如果出現(xiàn)500錯,響應(yīng)頭不包含這兩個跨域標(biāo)記,Chrome就會理所當(dāng)然地不顯示返回內(nèi)容,也就無法看到錯誤描述,根本無法排查。

參考資料

Using CORS

Cross-Origin Resource Sharing

HTTP access control (CORS)

jQuery.ajax()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/20935.html

相關(guān)文章

  • JavaScript の MUI-APP 數(shù)據(jù)儲存方法

    摘要:是手機(jī)端關(guān)系型數(shù)據(jù)庫的最佳方案,各種手機(jī)都支持。但是目前手機(jī)端重量數(shù)據(jù)存儲的唯一可商用方案。是里最新的數(shù)據(jù)存儲規(guī)范,但不是基于,而是基于對象。與的標(biāo)準(zhǔn)相比,的擴(kuò)展主要是為了跨域。有網(wǎng)友封裝了一個框架,針對數(shù)據(jù),在超過時自動切換到,參考。 總結(jié)HTML5+的離線本地存儲的多種方案: [ √ ] HTML5標(biāo)準(zhǔn)方案:cookie、localstorage、sessionstorage、w...

    fancyLuo 評論0 收藏0
  • JavaScript の MUI-APP 數(shù)據(jù)儲存方法

    摘要:是手機(jī)端關(guān)系型數(shù)據(jù)庫的最佳方案,各種手機(jī)都支持。但是目前手機(jī)端重量數(shù)據(jù)存儲的唯一可商用方案。是里最新的數(shù)據(jù)存儲規(guī)范,但不是基于,而是基于對象。與的標(biāo)準(zhǔn)相比,的擴(kuò)展主要是為了跨域。有網(wǎng)友封裝了一個框架,針對數(shù)據(jù),在超過時自動切換到,參考。 總結(jié)HTML5+的離線本地存儲的多種方案: [ √ ] HTML5標(biāo)準(zhǔn)方案:cookie、localstorage、sessionstorage、w...

    wenshi11019 評論0 收藏0
  • 雜談:前端Web通信

    摘要:作為開發(fā)同學(xué)的小伙伴客戶端的瀏覽器,有點(diǎn)小調(diào)皮還做了一個同源策略的限制,當(dāng)我們的數(shù)據(jù)請求遇到不同源的情況下跨域,我們就得嘗試其它的通信方法,不能一條道走到黑。 showImg(https://segmentfault.com/img/bVburZO?w=600&h=450); Web2.0以來,Ajax的出世,解決了傳統(tǒng)表單提交頁面跳轉(zhuǎn),閃爍白屏等問題。使得Web頁面可以實(shí)現(xiàn)局部更新,...

    Betta 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<strike id="ss0i0"></strike>
<