Middleware(中间件)是连接系统组件的软件层,在请求到达主应用之前进行处理。本文介绍其工作原理、分类、在REST API中的应用以及Laravel中的实际示例。
10,000+
信赖用户
99.9%
在线保障
195+
覆盖国家
高速代理 - 准备试用?
ALGO Proxy 提供住宅、数据中心和 4G 代理,覆盖 195+ 国家
什么是Middleware?

Middleware(中间件)是位于操作系统、数据库和应用程序之间的软件层。它充当桥梁,使系统中不同组件能够进行通信和数据交换,不受编程语言或平台限制。
中间件的概念出现于20世纪80年代,当时企业系统需要跨平台集成多个应用。中间件提供统一的抽象层,而非让每个应用自行处理连接——降低复杂性,提高可扩展性。
在现代Web开发中,中间件通常指Express.js、Laravel、Django等框架中的请求/响应处理机制——在HTTP请求到达控制器之前进行拦截和处理。
工作原理

中间件采用管道模式(处理链)运作:
- 客户端向服务器发送HTTP请求。
- 中间件1拦截请求→执行处理(如:CORS检查)。
- 中间件2继续处理(如:JWT令牌认证)。
- 中间件3进一步处理(如:日志记录、限流)。
- 控制器接收经过中间件处理的请求,执行业务逻辑。
- 响应在返回客户端之前,反向通过中间件管道。
每个中间件可以:
- 转发请求到下一个中间件(调用
next())。 - 阻止请求并立即返回响应(如:401 Unauthorized)。
- 转换请求/响应(添加头部、转换数据)。
中间件分类

| 类型 | 功能 | 示例 |
|---|---|---|
| 消息中间件(MOM) | 系统间异步消息传递 | RabbitMQ、Apache Kafka、ActiveMQ |
| 数据库中间件 | 连接应用与多种数据库 | ODBC、JDBC、Sequelize |
| 应用服务器 | 提供应用运行环境 | Tomcat、WildFly、IIS |
| API/集成中间件 | 连接和管理服务间的API | MuleSoft、Apache Camel、Kong |
| Web中间件 | 在Web框架中处理HTTP请求 | Express中间件、Laravel中间件 |
| RPC中间件 | 系统间远程过程调用 | gRPC、XML-RPC、JSON-RPC |
中间件 vs API网关
中间件处理应用内部逻辑(认证、日志)。API网关管理外部流量(路由、限流、负载均衡)。在微服务架构中,API网关通常内部组合多个中间件。
REST API中的中间件

在REST API中,中间件处理与业务逻辑分离的通用任务:
| 中间件 | 功能 | 示例 |
|---|---|---|
| 认证 | 通过JWT、OAuth、API Key验证用户 | passport.js、jwt-auth |
| 授权 | 检查资源访问权限 | 基于角色、基于策略 |
| 验证 | 验证输入数据 | express-validator、Form Request |
| 限流 | 限制时间段内的请求数量 | express-rate-limit、throttle |
| CORS | 允许来自其他域的请求 | cors中间件 |
| 日志 | 记录请求/响应数据 | morgan、monolog |
| 压缩 | 压缩响应以减少带宽 | compression、gzip |
| 错误处理 | 集中式错误处理 | Error中间件 |
Express.js中的认证中间件示例:
const authMiddleware = (req, res, next) => {
const token = req.headers.authorization?.split(' ')[1];
if (!token) return res.status(401).json({ error: 'Token required' });
try {
req.user = jwt.verify(token, process.env.JWT_SECRET);
next(); // 传递到下一个中间件/控制器
} catch (err) {
res.status(403).json({ error: 'Invalid token' });
}
};
app.get('/api/profile', authMiddleware, profileController);
Laravel中的中间件

Laravel将中间件集成到HTTP管道中,分为3个级别:
- 全局中间件: 对每个请求运行(如:
TrustProxies、HandleCors)。 - 路由中间件: 分配给特定路由(如:
auth、throttle)。 - 中间件组: 组合多个中间件(如:
web、api)。
创建自定义中间件:
php artisan make:middleware CheckAge
// app/Http/Middleware/CheckAge.php
public function handle(Request $request, Closure $next)
{
if ($request->age < 18) {
return redirect('home');
}
return $next($request);
}
注册和使用:
// routes/web.php
Route::get('/dashboard', function () {
// 逻辑
})->middleware('check.age');
Laravel还支持终止中间件(terminable middleware)——在响应发送给客户端后执行处理(如:记录日志、发送通知)。
优势和应用场景

- 关注点分离(SoC): 认证、日志、缓存逻辑与业务逻辑分离——代码更清晰,更易维护。
- 可重用性: 单个中间件可在多个路由/控制器中使用,无需重复代码。
- 集中安全: 在一个点进行认证、授权和输入验证,而非分散各处。
- 易扩展: 添加/移除中间件不影响核心应用逻辑。
- 性能优化: 缓存和压缩中间件优化响应时间。
- 监控: 日志中间件记录所有请求,便于跟踪和调试。
中间件最佳实践
保持每个中间件简单,只做一件事(单一职责)。正确排序——CORS在认证之前,认证在授权之前。避免在中间件中放置业务逻辑。使用中间件组便于管理。
总结: Middleware(中间件)是现代应用架构中必不可少的中间软件层,从企业系统集成到Web框架中的HTTP请求处理。正确理解和使用中间件有助于构建安全、可扩展、易维护的应用。
来源与参考文献
1. [Mozilla — HTTP Middleware](https://developer.mozilla.org/en-US/docs/Glossary/Middleware)
2. [Express.js — Using Middleware](https://expressjs.com/en/guide/using-middleware.html)
3. [Laravel — Middleware Documentation](https://laravel.com/docs/middleware)
4. [Wikipedia — Middleware](https://en.wikipedia.org/wiki/Middleware)
5. [Red Hat — What is Middleware?](https://www.redhat.com/en/topics/middleware/what-is-middleware)
常见问题
什么是Middleware?
Middleware(中间件)是位于操作系统/数据库和应用程序之间的软件层,帮助各组件进行通信、数据交换和高效处理请求。
Middleware如何工作?
Middleware在请求到达主应用之前进行拦截,执行处理(认证、日志、数据转换),然后转发或返回响应。这个过程形成中间件管道(pipeline)。
Middleware有哪些类型?
包括:消息中间件(MOM)、数据库中间件、应用服务器中间件、API/集成中间件,以及Web中间件(在Express、Laravel、Django等框架中处理HTTP请求)。
Middleware在REST API中有什么作用?
在REST API中,Middleware处理JWT/OAuth认证、日志记录、限流、CORS、输入验证、响应压缩和错误处理等通用任务——与业务逻辑分离。
如何在Laravel中创建Middleware?
使用php artisan make:middleware命令创建,在handle()方法中编写逻辑,在bootstrap/app.php中注册或直接分配给路由/组。Laravel支持全局、路由和组中间件。









