webpack的proxy
# 定义
webpack proxy,即 webpack 提供的代理服务
基本行为就是接收客户端发送的请求后转发给其他服务器
其目的是为了便于开发者在开发模式下解决跨域问题(浏览器安全策略限制)
想要实现代理首先需要一个中间服务器,webpack 中提供服务器的工具为 webpack-dev-server
# webpack-dev-server
webpack-dev-server 是 webpack 官方推出的一款开发工具,将自动编译和自动刷新浏览器等一系列对开发友好的功能全部集成在了一起
目的是为了提高开发者日常的开发效率,只适用在开发阶段
// ./webpack.config.js
const path = require("path");
module.exports = {
// ...
devServer: {
contentBase: path.join(__dirname, "dist"),
compress: true,
port: 9000,
proxy: {
"/api": {
target: "https://api.shenzjd.com",
},
},
// ...
},
};
- target:表示的是代理到的目标地址
- pathRewrite:默认情况下,我们的 /api-hy 也会被写入到 URL 中,如果希望删除,可以使用 pathRewrite
- secure:默认情况下不接收转发到 https 的服务器上,如果希望支持,可以设置为 false
- changeOrigin:它表示是否更新代理后请求的 headers 中 host 地址
# 原理
proxy 工作原理实质上是利用 http-proxy-middleware 这个 http 代理中间件,实现请求转发给其他服务器
# 例子
在开发阶段,本地地址为http://localhost:3000,该浏览器发送一个前缀带有/api标识的请求到服务端获取数据,但响应这个请求的服务器只是将请求转发到另一台服务器中
const express = require("express");
const proxy = require("http-proxy-middleware");
const app = express();
app.use(
"/api",
proxy({ target: "http://www.shenzjd.com", changeOrigin: true })
);
app.listen(3000);
// http://localhost:3000/api/foo/bar -> http://www.shenzjd.com/api/foo/bar
# 参考链接
编辑 (opens new window)
上次更新: 2024/11/29, 10:10:04