a day ago
- 该教程是构建基于WebSocket的聊天服务器系列的一部分,从基本的NodeJS Web服务器开始。
- 前提条件包括安装NodeJS并熟悉JavaScript,特别是异步函数和回调。
- Web服务器监听HTTP连接,处理请求并返回响应(例如文件或404错误)。
- 该服务器采用硬编码方式(重新发明轮子)实现,用于学习目的;实际项目会使用Connect或Serve Static等库。
- 总体计划:监听连接,确定请求的文件,检查文件是否存在(包括目录的index.html),确定MIME类型,读取文件并发送响应。
- NodeJS的I/O函数有同步(更简单)和异步(对大量请求更高效)两种形式;本教程使用异步方式。
- 代码框架使用`require('http')`创建服务器,然后提取请求路径并调用`getFilenameFromPath()`来定位文件。
- `onGotFilename`回调处理错误(404、500)或使用`fs.readFile()`读取文件,确定MIME类型并发送HTTP响应。
- MIME类型映射通过一个简单的函数根据文件扩展名实现;实际应用中会依赖`mime`等库。
- 安全性至关重要:服务器对路径进行清理,以防止目录遍历攻击(例如%2e%2e序列),确保解析后的路径保持在基本目录内。
- 完整服务器代码可在GitHub上获取,可通过`node httpserver.js`在端口3490上运行,提供当前目录下的文件。
- 可通过浏览器或curl进行测试,curl会显示包含计算出的Content-Type的HTTP头部。