摘要:默認情況下,跨域請求發起時候不包含,需要我們主動將的屬性設為才行。出現錯誤時,會返回完整的棧,有利排查。不然如果出現錯,響應頭不包含這兩個跨域標記,就會理所當然地不顯示返回內容,也就無法看到錯誤描述,根本無法排查。
首發我的博客
HTML5中提供了跨域加載數據的方法,讓我們得以從JSONP或者Flash中介等各種繞行方案中解脫出來,更加順暢地與服務器交流。另一方面,因為PHP是最好的語言……所以在它與Node.js之間,我選擇前者作為后端語言開發內容服務。
這篇文章記錄使用jQuery+PHP開發跨域應用時的小心得。
身份驗證做身份驗證,最簡單的辦法就是使用PHP的SESSION保存用戶信息,于是就要用到Cookie。默認情況下,跨域Ajax請求發起時候不包含Cookie,需要我們主動將XHR的withCredentials屬性設為true才行。
jQuery會把XHR封裝成jqXHR,并且不暴露真正的XHR(說實話這點有點難以理解,尤其是在做上傳進度條的時候)。然后它提供一個給真正XHR賦值的接口xhrField,所以寫成代碼就是這樣事兒的:
$.ajax(url, { xhrField: { withCredentials: true } }各種HTTP頭
如果不需要驗證用戶身份,直接在HTTP頭中輸出Access-Control-Allow-Origin: *即可。
我的產品需要驗證,那么首先,HTTP頭中必須有Access-Control-Allow-Credentials: true;此時對域的限制也嚴格許多,不再允許像前面那樣使用*放開給任何來源,必須指明哪個具體域可以接受。
關于Access-Control-Allow-Origin的值,規范中的說明是“域名列表或null”,然則接下來的“注意”有點詭異:“實際生產中,‘列表或null’要求更嚴格。你可以認為它實際只允許單一域名或null,而非空格分隔的域名列表。”——既然如此你干脆寫個“域名或null”不就完了……
總之對于我們而言,返回的HTTP頭中還要包含Access-Control-Allow-Origin: http://域名,指定允許作為來源的協議、域名、端口,并且只能有一個(組)。因為通常來說我們開發環境和生產環境不一樣,所以這里的域名最好不要寫在服務器配置里;使用PHP,通過$_SERVER["HTTP_ORIGIN"]取出訪問來源,與白名單比對,通過后再輸出相應的頭,更加合適。
調試我選擇JSON作為前后端交流的格式。為了方便瀏覽器解析(也是HTML5的要求),我還返回了Content-type: application/json頭。
使用PHP少不了使用Xdebug。出現錯誤時,Xdebug會返回完整的棧,有利排查。但是為了方便閱讀,Xdebug還會給返回信息套上 與之相反的是前文說到的Access-Control-Allow-Origin和Access-Control-Allow-Credentials,這二位必須放在最前面。不然如果出現500錯,響應頭不包含這兩個跨域標記,Chrome就會理所當然地不顯示返回內容,也就無法看到錯誤描述,根本無法排查。 Using CORS Cross-Origin Resource Sharing HTTP access control (CORS) jQuery.ajax() 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。 轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20935.html 摘要:是手機端關系型數據庫的最佳方案,各種手機都支持。但是目前手機端重量數據存儲的唯一可商用方案。是里最新的數據存儲規范,但不是基于,而是基于對象。與的標準相比,的擴展主要是為了跨域。有網友封裝了一個框架,針對數據,在超過時自動切換到,參考。
總結HTML5+的離線本地存儲的多種方案:
[ √ ] HTML5標準方案:cookie、localstorage、sessionstorage、w... 摘要:是手機端關系型數據庫的最佳方案,各種手機都支持。但是目前手機端重量數據存儲的唯一可商用方案。是里最新的數據存儲規范,但不是基于,而是基于對象。與的標準相比,的擴展主要是為了跨域。有網友封裝了一個框架,針對數據,在超過時自動切換到,參考。
總結HTML5+的離線本地存儲的多種方案:
[ √ ] HTML5標準方案:cookie、localstorage、sessionstorage、w... 摘要:作為開發同學的小伙伴客戶端的瀏覽器,有點小調皮還做了一個同源策略的限制,當我們的數據請求遇到不同源的情況下跨域,我們就得嘗試其它的通信方法,不能一條道走到黑。
showImg(https://segmentfault.com/img/bVburZO?w=600&h=450);
Web2.0以來,Ajax的出世,解決了傳統表單提交頁面跳轉,閃爍白屏等問題。使得Web頁面可以實現局部更新,... 閱讀 3974·2021-11-18 13:21 閱讀 4775·2021-09-27 14:01 閱讀 3115·2019-08-30 15:53 閱讀 2392·2019-08-30 15:43 閱讀 1735·2019-08-30 13:10 閱讀 1516·2019-08-29 18:39 閱讀 893·2019-08-29 15:05 閱讀 3346·2019-08-29 14:14結構,這時Chrome的Network工具就會把它解析成奇怪的格式,所以Content-type一定要最后和數據一起返回。
相關文章
JavaScript の MUI-APP 數據儲存方法
JavaScript の MUI-APP 數據儲存方法
雜談:前端Web通信
發表評論
0條評論
xiaolinbang
男|高級講師
TA的文章
閱讀更多
用云服務器挖礦可以賺錢?云服務器挖礦的優點和缺點
常用的八款免費程序員喜歡的代碼編輯器推薦「你用哪個」
拿什么拯救你——汗牛充棟良莠不齊的技術類文章
摸倚天魚文章推薦系列 - 19/03/31
sass筆記-1|Sass是如何幫你又快又好地搞定CSS的
CSS技巧之'text-justify'
vue過度動畫的使用方法整理
前端-CSS3&H5