HTTP Web服务器简介
一、Web服务器的分类与实现
Web服务器根据软硬件形态可分为三类,各有其优缺点:
类型 | 描述 | 特点 |
通用软件服务器 | 运行在标准计算机上(如Apache、Nginx、微软IIS) | 灵活、功能丰富,支持自定义配置,适合大多数场景。 |
Web服务器设备 | 预装软硬件的集成设备(如机架式服务器) | 开箱即用,维护简单,但扩展性差,适用于中小型企业快速部署。 |
嵌入式服务器 | 嵌入到打印机、智能家居等设备中的微型服务器 | 体积小、功耗低,功能有限,适合设备管理和简单交互。 |
二、Web服务器的核心任务
Web服务器处理HTTP事务的流程可分为七步,如下图所示(原文描述):
- 建立连接
- 接受或拒绝客户端TCP连接,可能基于IP黑名单或安全策略过滤请求。
- 通过反向DNS解析客户端主机名(可能影响性能,大流量服务器常禁用)。
- 接收请求
- 解析HTTP报文:请求行、首部、空行、请求主体(如有)。
- 高性能服务器使用复用I/O结构(如Nginx的epoll模型)高效处理海量连接。
- 处理请求
- 根据HTTP方法(GET、POST等)和首部决定操作,例如GET请求禁止携带请求体。
- 访问资源
- 将URI映射到服务器资源,关键机制包括:
- 文档根目录(docroot):如Apache的DocumentRoot /var/www/html。
- 虚拟托管:同一服务器托管多个站点,通过Host首部区分(如www.hostname1.com和www.hostname2.com)。
- 动态内容:通过CGI脚本或应用程序服务器(如Node.js)生成。
- 构建响应
- 确定MIME类型(通过文件扩展名、魔法分类或显式配置)。
- 状态码与重定向(常见场景见下表):
场景 | 状态码 | 示例 |
资源永久迁移 | 301 Moved Permanently | 网站域名更换后引导用户更新书签。 |
临时维护或负载均衡 | 307 Temporary Redirect | 将请求重定向到备用服务器。 |
目录规范化 | 301 或 308 | 自动补全URL斜杠(如/docs → /docs/)。 |
- 发送响应
- 非持久连接:响应后立即关闭TCP连接。
- 持久连接:需正确计算Content-Length,确保客户端识别响应结束。
- 记录日志
- 记录请求详情(如客户端IP、请求路径、状态码),常用格式包括Apache的通用日志格式(CLF)。