摘要:默認(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,需要我們主動將XHR的withCredentials屬性設(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還會給返回信息套上 與之相反的是前文說到的Access-Control-Allow-Origin和Access-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 摘要:是手機(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... 摘要:是手機(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... 摘要:作為開發(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)局部更新,... 閱讀 3998·2021-11-18 13:21 閱讀 4817·2021-09-27 14:01 閱讀 3125·2019-08-30 15:53 閱讀 2401·2019-08-30 15:43 閱讀 1746·2019-08-30 13:10 閱讀 1526·2019-08-29 18:39 閱讀 899·2019-08-29 15:05 閱讀 3354·2019-08-29 14:14結(jié)構(gòu),這時Chrome的Network工具就會把它解析成奇怪的格式,所以Content-type一定要最后和數(shù)據(jù)一起返回。
相關(guān)文章
JavaScript の MUI-APP 數(shù)據(jù)儲存方法
JavaScript の MUI-APP 數(shù)據(jù)儲存方法
雜談:前端Web通信
發(fā)表評論
0條評論
xiaolinbang
男|高級講師
TA的文章
閱讀更多
用云服務(wù)器挖礦可以賺錢?云服務(wù)器挖礦的優(yōu)點(diǎn)和缺點(diǎn)
常用的八款免費(fèi)程序員喜歡的代碼編輯器推薦「你用哪個」
拿什么拯救你——汗牛充棟良莠不齊的技術(shù)類文章
摸倚天魚文章推薦系列 - 19/03/31
sass筆記-1|Sass是如何幫你又快又好地搞定CSS的
CSS技巧之'text-justify'
vue過度動畫的使用方法整理
前端-CSS3&H5