甚麼是proxy? PROXY只是本地端開發用的
proxy類似替換路徑,將下述的/api傳換為後端需求的http://localhost:8080/ main
甚麼是跨域連線
https://blog.csdn.net/huangpb123/article/details/122354830
在本機中,前端與後端的port不能相同,他們個佔用了一個port,但是前端會需要跨域(跨一個port)請求資料
此時就要跨域連線,通常是**本機開發(同網域開發)**才有這個問題
實際作法:有二
3-1 前端修改proxy
在本地端開發時後端API的Domain為http://localhost:8080/ 要打的API為/login
這時候我在本地端開發時,由於前端的預設是http://localhost:8080/ port
=> 理論上我在專案中可以這樣做
=> API路徑為api/login,proxy配置為 /api 倒轉至 http://localhost:8080/
// Vue vite.config.ts
export default defineConfig({
server: {
port: 5000, // http://localhost:5000/
proxy: {
'/api': {
target: 'http://127.0.0.1:8080', // 後端API伺服器domain
changeOrigin: true,
},
},
},
})
// 引用axios層
import axios from 'axios';
// 創建axios
const service = axios.create({
// baseURL: '/api',
baseURL: '/api', // 在 vite.config.ts 設定了 proxy,所以 baseURL 可以直接設定為 /api
timeout: 80000
});
3-2 後端可以增加所有網域請求,讓本機可以打後端API
// Golang
w.Header().Set("Access-Control-Allow-Origin","*") // "*"代表允许所有的網域请求,目前"http://localhost:5000"是前端的網域
// Golang 完整
package main
import (
"net/http"
)
func main() {
http.HandleFunc("/aaa", func(w http.ResponseWriter, r *http.Request) {
// 设置 CORS 头
w.Header().Set("Access-Control-Allow-Origin") // "*"代表允许所有的網域请求,目前"http://localhost:5000"是前端的網域
w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, hextoken")
// 如果是 OPTIONS 请求,直接返回成功
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusOK)
return
}
// 其他的处理代码
})
http.ListenAndServe(":8080", nil)
}