咱們在寫Hybird App時,通常都是利用Token來代替Cookie實現用戶會話。前端
若是是發佈成app的話,因爲app自帶了webview環境,運行時與後端服務器的關係至關於Server 2 Server,所以通常不涉及跨域的問題。web
但若是發佈成H5 App的話,由於是直接在終端的瀏覽器裏運行,就會涉及到CORS(跨域資源共享)的處理問題。後端
關於CORS的解決辦法,主要就是三個方面:跨域
一、簡單請求:不涉及Header的附加信息,直接添加如下頭部響應便可:瀏覽器
response.setHeader("Access-Control-Allow-Origin", "*"); //容許的請求域名 response.setHeader("Access-Control-Allow-Methods", "POST, GET"); //容許的請求方式 response.setHeader("Access-Control-Allow-Headers", "*"); //容許的自定義頭 response.setHeader("Access-Control-Max-Age", "3600"); //信任時間
二、複雜請求:若是請求或者響應的Header中包含須要處理的額外信息時,則每次實際請求以前都會發送一次OPTIONS類型的預請求,若是預請求獲得正確的迴應,纔會發送正式請求,所以,須要服務端除了要添加上面的響應之外,還要對預請求進行處理:服務器
String method = getRequest().getMethod().toUpperCase(); if(method == "OPTIONS"){ response.setStatus(HttpStatus.SC_NO_CONTENT); }
三、發送Token:也是最重要的一點,若是須要經過Header向前端返回Token,那麼在發送響應以前,還須要額外添加一行許可:app
response.setHeader("Access-Control-Expose-Headers", "MyAppTokenName"); response.setHeader("MyAppTokenName", TokenUtil.getToken());
其中紅色的那行代碼很是重要,不然前端將沒法接收到response回來的Token串。spa