HTTP服务器用于处理客户端HTTP请求并返回响应,支持静态资源服务或动态逻辑处理,JavaScript可通过Node.js等技术实现服务器端功能,如API开发、数据处理,并与
HTTP服务器中的JavaScript基础
核心模块与功能
模块/工具 | 功能描述 | 适用场景 |
http 模块 | Node.js内置模块,用于创建基础HTTP服务器 | 快速搭建简单服务器、学习原理 |
Express.js | 流行的Web框架,提供路由、中间件等功能 | 复杂业务逻辑、快速开发 |
Koa.js | 轻量级Web框架,基于Promise设计 | 现代异步编程、中间件组合 |
基础示例:使用http
模块创建服务器
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'GET') {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello, World!');
} else {
res.writeHead(405, { 'Content-Type': 'text/plain' });
res.end('Method Not Allowed');
}
});
server.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
常用框架与功能扩展
Express.js核心特性
功能 | 说明 | 示例代码 |
路由定义 | 通过app.get()/post() 绑定路径与处理函数 | app.get('/api', (req, res) => res.send('API Response')) |
中间件 | 处理请求/响应的通用逻辑(如日志、验证) | app.use((req, res, next) => { console.log(req.path); next() }) |
错误处理 | 捕获异常并返回统一响应 | app.use((err, req, res, next) => res.status(500).send(err.message)) |
Koa.js与异步支持
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
console.log(`${ctx.method} ${ctx.path}`);
await next(); // 传递控制权
});
app.use(async (ctx) => {
ctx.body = 'Hello Koa!';
});
app.listen(3000);
安全与性能优化
安全防护措施
风险类型 | 解决方案 | 代码示例 |
XSS攻击 | 对用户输入进行HTML转义 | escapeHTML(userInput) |
CSRF攻击 | 使用CSRF Token验证请求 | csurfMiddleware(req, res, next) |
参数被墙 | 使用querystring 解析并校验参数 | URLSearchParams 解析URL参数 |
性能优化策略
优化方向 | 具体手段 | 效果 |
并发处理 | 使用cluster 模块启用多进程 | 充分利用多核CPU |
资源缓存 | 设置ETag 和Cache-Control 头 | 减少重复传输 |
压缩响应 | 启用Gzip压缩 | 减少带宽占用 |
静态资源服务与部署
静态文件处理(以Express为例)
const express = require('express');
const app = express();
const path = require('path');
// 指定静态文件目录
app.use('/static', express.static(path.join(__dirname, 'public')));
// 启动服务器
app.listen(3000, () => console.log('Static files served at /static'));
生产环境部署建议
场景 | 工具/方案 | 说明 |
进程管理 | PM2 | 守护进程、负载均衡 |
反向代理 | Nginx | 处理静态资源、SSL终端 |
容器化 | Docker | 环境一致性、快速部署 |
相关问题与解答
问题1:如何处理跨域请求?
解答:
使用CORS(跨域资源共享)机制,通过设置Access-Control-
响应头允许指定域名的请求。
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', ''); // 允许所有域名
res.header('Access-Control-Allow-Methods', 'GET,POST'); // 允许的方法
next();
});
问题2:如何限制请求速率以防止DDoS攻击?
解答:
使用速率限制中间件(如express-rate-limit
),配置单位时间内的最大请求数:
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 60 1000, // 15分钟窗口
max: 100, // 每IP最多100次请求
message: 'Too many requests, please try again later'
});
app.use(limiter); //