Ionic 跨域

前端的跨域問題是由于瀏覽器的同源策略引起,協(xié)議,域名,端口的不同均會導(dǎo)致跨域問題,無法訪問到我們期望的服務(wù)器。

采用Ionic 開發(fā) Web App 和Hybrid App, 同樣會遇到跨域問題,解決的方式也不盡相同。

Web App

Web App的本質(zhì)還是一個web 應(yīng)用

  • 代理服務(wù)器:通過代理服務(wù)器,把本地的請求通過代理服務(wù)器轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器 webpack devServer

  • 本地采用非安全模式瀏覽器: 非安全模式瀏覽器將不在采用同源策略
    Mac: open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/UserName/MyChromeDevUserData/
    Window:

    922445-20180814152040697-1083243052.png

    關(guān)閉所有的chrome瀏覽器,打開chrome 瀏覽器的屬性窗口,在路徑上添加" --args --disable-web-security --user-data-dir", 如上圖

  • Cors: 設(shè)置Cors 的request header(后端) Access-Control-Allow-Origin 為 *(任何源都可以訪問, 相對不安全)

如果應(yīng)用要求Session作為驗證token, 則第三種方式無效。原因是設(shè)置
Access-Control-Allow-Origin: * 后,請求時不會自動帶上Cookie, 也就不會帶上Session.

  • JSONP: 利用JS可以加載非同源的外部資源的形式發(fā)送網(wǎng)絡(luò)請求,以回調(diào)的方式讀取資源。
Hybrid App

Web 資源的存在位置在本地還是在云端決定了跨域問題的處理方式

Web 資源在云端

Ionic 的開發(fā)模式允許開發(fā)者將App 作為一個原生容器, 啟動App時會加載云端的Web 資源,即用App 打開了一個webview。這種情況,開發(fā)同樣是web app 的開發(fā)形式,跨域問題請參考以上.

Web 資源在本地

Ionic 的混合開發(fā)模式允許用戶將web 資源存在本地,形式等同于原生App,加載資源的時候也是從本地,提升用戶體驗。
資源存放在本地時,如果這時發(fā)起網(wǎng)絡(luò)請求,是從本機發(fā)起本機發(fā)起的(localhost)

  • 后端不需要通過Session驗證信息,可以采用設(shè)置Cors 的Access-Control-Allow-Origin: * 來訪問。
  • 后端需要通過Seesion 驗證信息,則需要通過原生的方式來做網(wǎng)絡(luò)請求。
    1、Cordova 插件:cordova-plugin-advanced-http
const options = {
  method: 'post',
  data: { id: 12, message: 'test' },
  headers: { Authorization: 'OAuth2: token' }
};

cordova.plugin.http.sendRequest('https://google.com/', options, function(response) {
  // prints 200
  console.log(response.status);
}, function(response) {
  // prints 403
  console.log(response.status);

  //prints Permission denied
  console.log(response.error);
});

2、原生支持:通過JS bridge, 原生與JS通信。JS發(fā)消息給原生,原生發(fā)出網(wǎng)絡(luò)請求,請求回復(fù)后給JS消息,消息體中攜帶網(wǎng)絡(luò)返回的內(nèi)容。

跨域的核心問題即瀏覽器的同源策略,規(guī)避或者繞過同源策略即可解決跨域問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容