http模块知识点总结

核心概念

概念 说明

http.createServer() 创建一个 HTTP 服务器实例

server.listen(port, host, callback) 监听指定端口和主机,启动服务器

request 事件 每当有请求到达时触发,回调参数为 req(请求对象)和 res(响应对象)

req 常用属性 url、method、headers、httpVersion

res 常用方法 res.writeHead(statusCode, headers)、res.write(data)、res.end(data)

res 状态码 200(成功)、404(未找到)、500(服务器错误)等

Content-Type 告诉浏览器如何解析响应内容(如 text/html、application/json)

处理请求的常见模式

路由:根据 req.url 和 req.method 分发到不同逻辑。

获取查询参数:使用 url.parse(req.url, true).query。

获取 POST body:监听 data 和 end 事件,拼接 Buffer 或字符串。

返回静态文件:结合 fs 模块读取文件,设置正确的 Content-Type。

返回 JSON:Content-Type: application/json,res.end(JSON.stringify(obj))。

进阶话题

req.socket:获取客户端连接信息。

res.setHeader() 与 res.writeHead() 的区别。

流式响应:用 fs.createReadStream().pipe(res) 处理大文件。

HTTPS 支持:使用 https 模块,需提供证书。

Node.js http 模块

创建服务器

javascript 复制代码
- http.createServer([options][, requestListener])
  - 返回 http.Server 实例
- server.listen(port[, host][, backlog][, callback])
  - 监听端口,启动服务

事件模型

javascript 复制代码
- 事件: 'request' (最常用)
  - 回调: (req, res) => {}
- 事件: 'connection'
- 事件: 'close'

请求对象 req (http.IncomingMessage)

javascript 复制代码
- 属性
  - req.url        // 请求路径(含查询字符串)
  - req.method     // GET / POST / PUT / DELETE 等
  - req.headers    // 请求头对象
  - req.httpVersion
- 读取数据
  - req.on('data', chunk => {})   // 接收 POST body
  - req.on('end', () => {})       // 数据接收完毕

响应对象 res (http.ServerResponse)

javascript 复制代码
- 设置响应头
  - res.writeHead(statusCode, statusMessage?, headers?)
  - res.setHeader(name, value)
- 发送数据
  - res.write(chunk[, encoding][, callback])
  - res.end([data][, encoding][, callback])
- 状态码
  - 200 OK
  - 404 Not Found
  - 500 Internal Server Error

常见 Content-Type

javascript 复制代码
- text/html
- text/css
- application/javascript
- application/json
- image/png, image/jpeg

静态文件服务

  • 路径解析 (path 模块)
  • 读取文件 (fs 模块)
  • 设置正确 Content-Type
  • 错误处理 (404, 500)

与 URL 模块配合

javascript 复制代码
- const url = require('url');
- url.parse(req.url, true) -> 得到 query 对象

实用技巧

  • 统一路由分发 (switch 或 map)
  • 处理 favicon.ico (避免多余请求)
  • 防止路径遍历攻击 (...)
  • 使用流式传输大文件
相关推荐
Escalating_xu几秒前
【Linux 网络编程】ARP 的具体过程与 ARP 欺骗:一条 IP → MAC 映射,怎样改变数据的去向?
linux·网络·tcp/ip
坚定的共产主义生产设备永不宕机20 分钟前
服务器从裸机开始搭建ESXI虚拟机
linux·服务器·网络
2301_780789661 小时前
智能汽车的“软肋”:车载系统漏洞分析与安全防护框架初探
网络·安全·车载系统·汽车·ddos
Escalating_xu1 小时前
【Linux 网络编程】IP 分片与重组:3000 字节的数据报,怎样拆开又拼回来?
linux·网络·tcp/ip
OpenLoong 开源社区1 小时前
打破 NAT 限制,零侵入跨网络通信:基于 WebRTC 的透明 TCP 隧道跨网络通信方案
网络协议·tcp/ip·开源·webrtc·openloong开源社区
风娜1 小时前
【Linux网络】UDP 服务器怎么写?从 socket、bind 到 recvfrom/sendto,手写完整回显服务器
linux·服务器·网络
从琳开始9891 小时前
从Socket到UDP回显服务器:Java网络编程完整指南
java·网络·网络协议·udp·java-ee
Gauss松鼠会2 小时前
GaussDB 整体架构解析
运维·服务器·网络·数据库·sql·架构·gaussdb
sinovoip2 小时前
Banana Pi BPI-RT2 WiFi 6 路由器板采用 Realtek RTL8198D 双核 MIPS SoC。
网络·智能路由器
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(上):初始化和全量响应
开发语言·网络·c++·语言模型