在 Node.js 和 Express 中,req.headers 是一个包含 HTTP 请求头信息的对象。以下是关于 req.headers 的详细说明和获取方法:
1. req.headers 的数据结构req.headers 是一个对象,键是请求头的名称(小写),值是对应的请求头值。例如:
{ 'x-api-key': '{{token}}', 'user-agent': 'PostmanRuntime/7.43.0', 'accept': '*/*', 'postman-token': '00b11a69-95b1-4194-8835-8d18d9be9ce0', 'host': 'localhost:3000', 'accept-encoding': 'gzip, deflate, br', 'connection': 'keep-alive'}2. 获取 req.headers 的方法在 Express 路由处理中,可以直接通过 req.headers 访问请求头信息。例如:
app.get('/user', (req, res) => { console.log(req.headers); // 打印所有请求头 console.log(req.headers['user-agent']); // 获取特定的请求头 res.send("嗨,baijing.biz你好!");});3. 常见请求头字段- user-agent:客户端信息(如浏览器或 Postman)。
- accept:客户端可接受的内容类型。
- host:请求的目标主机和端口。
- connection:连接类型(如 keep-alive)。
- authorization:认证信息(如 Bearer Token)。
- 自定义头:如 x-api-key。
4. 注意事项- 大小写不敏感:Express 会将请求头名称转换为小写,因此 req.headers['User-Agent'] 和 req.headers['user-agent'] 是等价的。
- 缺失头字段:如果请求头不存在,req.headers[key] 返回 undefined。
- 多值头字段:某些头字段(如 accept-encoding)可能有多个值,Express 会将其合并为一个字符串。
5. 完整示例代码const express = require('express');const app = express();app.get('/user', (req, res) => { // 打印所有请求头 console.log('Headers:', req.headers); // 获取特定请求头 const userAgent = req.headers['user-agent']; const apiKey = req.headers['x-api-key']; // 返回响应 res.send(`User-Agent: ${userAgent}, API Key: ${apiKey}`);});app.listen(3000, () => { console.log('Server running on http://localhost:3000'
);});6. 测试方法可以使用 Postman 或 curl 测试:
curl -H "x-api-key: 12345" -H "User-Agent: TestClient" http://localhost:3000/user
7. 其他相关属性- req.url:完整的请求 URL(包括查询字符串)。
- req.path:URL 的路径部分(不包括查询字符串)。
- req.query:解析后的查询字符串对象。
- req.method:HTTP 方法(如 GET、POST)。
总结req.headers 是 Express 中用于访问 HTTP 请求头的核心对象,通过它可以获取客户端发送的元数据(如认证信息、用户代理等)。结合其他 req 属性(如 url、query),可以全面解析请求内容。