electron-vue項目中開發環境中的axios跨域問題

前言前端

  上一篇總結了前端對 axios 的理解和常見的項目中的封裝使用方法,這期記錄一下 electron-vue 項目中開發環境下解決 http 、https請求跨域的問題。vue

正文ios

  1.爲何有跨域的存在?web

  先後端分離的一種開發模式下,在前端客戶端向服務端發送 ajax 請求的時候受到同源策略的限制,由於 ajax是基於http 協議的異步 JavaScript 和 XML,是一種用於先後端數據交互的技術,從而實現網頁異步更新,而 http 又受到同源策略的限制。所以產生了跨域的問題。ajax

  同源策略實質指 "協議+域名+端口號"三者相同,三者缺一不可。axios

  固然也存在一些不受同源策略限制的狀況,以下:後端

  (1)script 標籤容許跨域嵌入腳本,所以不受跨域限制。api

  (2)img 、link 標籤、@font-face 不受跨域影響。跨域

  (3)video 和 audio 嵌入的資源不受跨域影響。服務器

  (4)iframe 載入的任何資源不受跨域限制。

  (5)object 、embed 和 applet 插件不受同源限制。

  (6) websocket 協議通訊不受同源限制,只要服務器支持就能夠實現跨域通訊。

  2.常見的跨域解決方法總結?

  (1)基於 JSONP 技術實現跨域。

  (2)CORS--跨域資源共享。

  (3)使用代理服務器轉發請求。

  3.electron-vue 項目開發環境如何解決跨域?

  上一篇在項目中封裝 axios 的時候設置了baseUrl,要解決開發環境中跨域問題,只須要對該 url 在devServer 中設置服務代理便可。

  在electron-vue 項目中須要找到dev-runner.js文件。

  在該文件中找到 WebpackDevServer,裏面添加服務代理,代碼以下:

      const server = new WebpackDevServer(compiler, {
      contentBase: path.join(__dirname, "../"),
      quiet: true,
      proxy: {        "/api": {          // 請求的目標服務器地址
          target: "http://xxx.xxxxxx/",          // 若是是https接口,須要配置這個參數
          secure: false,          // 設置容許跨域
          changeOrigin: true,          // 重寫路徑          pathRewrite: {            "^/api": "",
          },
          headers: {
            referer: "",
          },
        },
      },
      before(app, ctx) {
        app.use(hotMiddleware);
        ctx.middleware.waitUntilValid(() => {
          resolve();
        });
      },
    });

  這樣就實現了前端經過服務代理解決跨域的問題,在頁面就能夠正常請求到服務端數據。

總結

  以上就是本文的所有內容,但願給讀者帶來些許的幫助和進步,方便的話點個關注,小白的成長踩坑之路會持續更新一些工做中常見的問題和技術點。

 

 

相關文章
相關標籤/搜索