Node.js 编程实战:创建 HTTP/HTTPS 服务器全解析

Node.js 的核心能力之一就是快速创建高性能的服务器。通过内置的 httphttps 模块,你可以在几行代码内搭建功能完善的 Web 服务。本文将系统讲解如何在 Node.js 中创建 HTTP 与 HTTPS 服务器,包括基础用法、请求处理、HTTPS 证书配置,以及性能与安全优化实践。


一、Node.js HTTP 服务器基础

Node.js 内置的 http 模块让创建 HTTP 服务器非常简单。

1. 基本示例

js 复制代码
const http = require("http");

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader("Content-Type", "text/plain");
  res.end("Hello Node.js HTTP Server!");
});

server.listen(3000, () => {
  console.log("Server running at http://localhost:3000/");
});

说明:

  • http.createServer 返回一个服务器实例
  • 回调函数 (req, res) 在每次请求到来时触发
  • req 包含请求信息,res 用于发送响应
  • server.listen 绑定端口并启动服务器

二、处理请求与响应

HTTP 请求包含方法、URL、头信息和请求体。响应也可以设置状态码、头信息及数据。

js 复制代码
const server = http.createServer((req, res) => {
  if (req.method === "GET" && req.url === "/") {
    res.writeHead(200, { "Content-Type": "text/html" });
    res.end("<h1>Welcome Home</h1>");
  } else {
    res.writeHead(404, { "Content-Type": "text/plain" });
    res.end("Page Not Found");
  }
});

技巧与建议:

  • 对请求进行路由判断,区分不同路径和方法
  • 响应头要根据内容类型设置
  • 大型项目可使用第三方框架如 Express 做路由和中间件管理

三、Node.js HTTPS 服务器

在实际生产环境中,HTTPS 已经是必须。Node.js 提供 https 模块支持加密传输。

1. 准备证书

创建 HTTPS 服务器前,需要拥有:

  • key.pem:私钥文件
  • cert.pem:证书文件(可以用自签名证书做测试)

可以使用 OpenSSL 生成测试证书:

bash 复制代码
openssl req -nodes -new -x509 -keyout key.pem -out cert.pem

2. 创建 HTTPS 服务器

js 复制代码
const https = require("https");
const fs = require("fs");

const options = {
  key: fs.readFileSync("key.pem"),
  cert: fs.readFileSync("cert.pem")
};

const server = https.createServer(options, (req, res) => {
  res.writeHead(200, { "Content-Type": "text/plain" });
  res.end("Hello Node.js HTTPS Server!");
});

server.listen(3443, () => {
  console.log("HTTPS Server running at https://localhost:3443/");
});

注意事项:

  • HTTPS 必须提供证书和私钥
  • 在生产环境中,请使用由可信 CA 签发的证书
  • 端口一般为 443(HTTP 默认端口为 80)

四、性能优化建议

虽然 Node.js 的 httphttps 模块足够轻量,但在高并发场景下,仍然可以优化:

  1. 开启 Keep-Alive 保持 TCP 连接,减少握手开销:
js 复制代码
res.setHeader("Connection", "keep-alive");
  1. 使用 gzip 压缩 减少传输数据量,提高响应速度:
js 复制代码
const zlib = require("zlib");
res.writeHead(200, { "Content-Encoding": "gzip" });
res.end(zlib.gzipSync("Hello World!"));
  1. 利用集群(cluster)提升 CPU 利用率 Node.js 单线程模型可以通过 cluster 模块启动多进程:
js 复制代码
const cluster = require("cluster");
const os = require("os");

if (cluster.isMaster) {
  const cpuCount = os.cpus().length;
  for (let i = 0; i < cpuCount; i++) {
    cluster.fork();
  }
} else {
  // worker 进程启动 HTTP/HTTPS 服务器
}
  1. 使用缓存 对静态文件或接口数据使用内存缓存或 CDN,降低重复计算和 I/O 压力。

五、常见应用场景

  • 搭建静态文件服务器
  • 提供 RESTful API 服务
  • 接入 WebSocket 做实时通信
  • 内网工具或微服务
  • HTTPS 接入支付、认证等安全场景

Node.js 的 HTTP/HTTPS 服务器能力非常适合高并发和轻量服务场景。


六、总结

通过本文,你应该掌握了:

  1. HTTP 服务器的创建与请求处理
  2. HTTPS 服务器的证书配置和创建
  3. 异步请求处理与响应机制
  4. 高性能与安全优化策略

Node.js 内置的 HTTP/HTTPS 模块简单高效,非常适合构建高性能微服务和 API。 理解这些基础,为使用 Express、Koa 等框架打下了坚实的底层基础。


相关推荐
梦想很大很大几秒前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
毅炼9 分钟前
Java 基础常见问题总结(4)
java·后端
想用offer打牌30 分钟前
MCP (Model Context Protocol) 技术理解 - 第一篇
后端·aigc·mcp
千寻girling35 分钟前
Koa.js 教程 | 一份不可多得的 Node.js 的 Web 框架 Koa.js 教程
前端·后端·面试
全栈前端老曹37 分钟前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈
程序员清风43 分钟前
北京回长沙了,简单谈谈感受!
java·后端·面试
何中应1 小时前
请求头设置没有生效
java·后端
NPE~1 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
宋小黑2 小时前
JDK 6到25 全版本网盘合集 (Windows + Mac + Linux)
java·后端
念何架构之路2 小时前
Go进阶之panic
开发语言·后端·golang