前言前端
上一篇總結了前端對 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(); }); }, });
這樣就實現了前端經過服務代理解決跨域的問題,在頁面就能夠正常請求到服務端數據。
總結
以上就是本文的所有內容,但願給讀者帶來些許的幫助和進步,方便的話點個關注,小白的成長踩坑之路會持續更新一些工做中常見的問題和技術點。