摘要:前后端分離之后,開發(fā)階段接口聯(lián)調(diào)就會(huì)出現(xiàn)跨域問(wèn)題。當(dāng)然,跨域問(wèn)題的解決方案還是挺多的,這里梳理下我接觸到的幾種方案。對(duì)于前端開發(fā)者來(lái)說(shuō),通信與同源的通信沒(méi)有差別,代碼完全一樣。后端實(shí)現(xiàn)接口只需合理設(shè)置,以為例
前后端分離之后,開發(fā)階段接口聯(lián)調(diào)就會(huì)出現(xiàn)ajax跨域問(wèn)題。
當(dāng)然,跨域問(wèn)題的解決方案還是挺多的,這里梳理下我接觸到的幾種方案。
目測(cè)這是最簡(jiǎn)單粗暴的方案
可以通過(guò)使用Chrome命令行啟動(dòng)參數(shù)來(lái)改變Chrome瀏覽器的設(shè)置。
這里使用的是disable-web-security參數(shù),這個(gè)參數(shù)可以降低Chrome瀏覽器的安全性,禁用同源策略。要支持跨域,還需要加上user-data-dir。
下面以Windows為例。
1.先關(guān)閉所有的Chrome窗口。
2.新建一個(gè)Chrome快捷方式,右擊->屬性->快捷方式。
3.在目標(biāo)(T)中設(shè)置參數(shù):
--args --disable-web-security --user-data-dir
4.點(diǎn)擊應(yīng)用/確定,以這個(gè)快捷方式打開Chrome瀏覽器,效果如下:
devServer: { ... proxy: { "/api": { target: "http://127.0.0.1:8080", pathRewrite: {"^/api": "/api/v1"} } } }
將 "/api" 通過(guò)本地開發(fā)服務(wù)器webpack-dev-server轉(zhuǎn)發(fā)到 "http://127.0.0.1:8080",即轉(zhuǎn)發(fā)到后端服務(wù)。pathRewrite用于路徑轉(zhuǎn)換,具體取決于你請(qǐng)求的uri與后端服務(wù)實(shí)際uri的差異,比如你本地起的80端口,你的uri為 "http://localhost/api",將為轉(zhuǎn)換成 "http://127.0.0.1:8080/api/v1"。
詳細(xì)配置請(qǐng)移步 webpack devServer。
http { ... server { ... location /api/ { proxy_pass http://127.0.0.1:8080 } } }四、后端實(shí)現(xiàn)CORS接口
CORS需要瀏覽器和服務(wù)器同時(shí)支持。目前所有現(xiàn)代瀏覽器都支持該功能,IE瀏覽器不能低于IE10。
對(duì)于前端開發(fā)者來(lái)說(shuō),CORS通信與同源的AJAX通信沒(méi)有差別,代碼完全一樣。
后端實(shí)現(xiàn)CORS接口只需合理設(shè)置Response Header,以node為例:
const express = require("express"); let app = express(); app.all("*", (req, res, next) => { res.setHeader("Access-Control-Allow-Origin", "*"); res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); next(); }); ...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/39691.html
摘要:這種情況通常發(fā)生在反向代理的時(shí)候,前端發(fā)起請(qǐng)求代理服務(wù)器,代理服務(wù)器發(fā)起請(qǐng)求到,這時(shí)候就容易導(dǎo)致域名不一致,請(qǐng)一定要注意這點(diǎn)。 寫在最前 前后端分離其實(shí)有兩類: 開發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件整個(gè)放入后端項(xiàng)目中。 開發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件放入單獨(dú)的靜態(tài)資源服務(wù)器中,如nginx。 這兩種方案最大的區(qū)別就是生產(chǎn)階段。由于第...
摘要:這種情況通常發(fā)生在反向代理的時(shí)候,前端發(fā)起請(qǐng)求代理服務(wù)器,代理服務(wù)器發(fā)起請(qǐng)求到,這時(shí)候就容易導(dǎo)致域名不一致,請(qǐng)一定要注意這點(diǎn)。 寫在最前 前后端分離其實(shí)有兩類: 開發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件整個(gè)放入后端項(xiàng)目中。 開發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件放入單獨(dú)的靜態(tài)資源服務(wù)器中,如nginx。 這兩種方案最大的區(qū)別就是生產(chǎn)階段。由于第...
摘要:這種情況通常發(fā)生在反向代理的時(shí)候,前端發(fā)起請(qǐng)求代理服務(wù)器,代理服務(wù)器發(fā)起請(qǐng)求到,這時(shí)候就容易導(dǎo)致域名不一致,請(qǐng)一定要注意這點(diǎn)。 寫在最前 前后端分離其實(shí)有兩類: 開發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件整個(gè)放入后端項(xiàng)目中。 開發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件放入單獨(dú)的靜態(tài)資源服務(wù)器中,如nginx。 這兩種方案最大的區(qū)別就是生產(chǎn)階段。由于第...
摘要:基本邏輯如下圖所示對(duì)此做了一個(gè)點(diǎn)贊的,邏輯不復(fù)雜,但達(dá)到了作為中間層實(shí)現(xiàn)前后端分離的目的。 零、用koa2實(shí)現(xiàn)前后端分離的點(diǎn)贊+1的功能(歡迎clone和star) Github:https://github.com/pengxiaohua/praise-by-koa簡(jiǎn)書:http://www.jianshu.com/p/c3215333655a 一、前后端不分離存在什么問(wèn)題 之前做一...
摘要:反向代理前后端聯(lián)調(diào)跨域什么是跨域跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。這時(shí)候,用反向代理實(shí)現(xiàn)跨域,是最簡(jiǎn)單的跨域方式。 keywords: Nginx反向代理 前后端聯(lián)調(diào) 跨域 1.什么是跨域 跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)javascript施加的安全限制。 所謂同源是指,域名,協(xié)議,端口都相同。瀏覽器執(zhí)行javascrip...
閱讀 1363·2021-09-28 09:43
閱讀 4166·2021-09-04 16:41
閱讀 1930·2019-08-30 15:44
閱讀 3754·2019-08-30 15:43
閱讀 789·2019-08-30 14:21
閱讀 2048·2019-08-30 11:00
閱讀 3331·2019-08-29 16:20
閱讀 1933·2019-08-29 14:21