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

資訊專欄INFORMATION COLUMN

HTML5跨域開發

xiaolinbang / 390人閱讀

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

  

首發我的博客

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

這篇文章記錄使用jQuery+PHP開發跨域應用時的小心得。

身份驗證

做身份驗證,最簡單的辦法就是使用PHP的SESSION保存用戶信息,于是就要用到Cookie。默認情況下,跨域Ajax請求發起時候不包含Cookie,需要我們主動將XHRwithCredentials屬性設為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還會給返回信息套上

結構,這時Chrome的Network工具就會把它解析成奇怪的格式,所以Content-type一定要最后和數據一起返回。

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

參考資料

Using CORS

Cross-Origin Resource Sharing

HTTP access control (CORS)

jQuery.ajax()

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20935.html

相關文章

  • JavaScript の MUI-APP 數據儲存方法

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

    fancyLuo 評論0 收藏0
  • JavaScript の MUI-APP 數據儲存方法

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

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

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

    Betta 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
      <