HTTP服务器的核心功能
HTTP服务器的主要职责是接收客户端(如浏览器)的请求,解析请求内容,处理逻辑后返回响应数据,其核心功能包括:
www.example.com
GET /index.html HTTP/1.1
路径:/index.html
协议版本:HTTP/1.1
/images/
→ 静态文件服务/api/data
→ 动态接口处理头部:
Content-Type: text/html
响应体:HTML内容
HTTP/1.1 200 OK<br>Content-Length: 1234<br><html>...</html>
HTTP协议关键解析点
请求报文结构
部分 | 格式 | 示例 |
---|---|---|
请求行 | 方法 路径 协议版本 |
GET /home HTTP/1.1 |
请求头 | 键: 值 (多行) |
Host: example.com<br>User-Agent: Mozilla/5.0 |
空行 | 分隔头部和主体 | <空行> |
请求体 | (POST/PUT时存在) | name=John&age=30 (URL编码) |
响应报文结构
部分 | 格式 | 示例 |
---|---|---|
状态行 | 协议版本 状态码 描述 |
HTTP/1.1 404 Not Found |
响应头 | 键: 值 (多行) |
Content-Type: application/json |
空行 | 分隔头部和主体 | <空行> |
响应体 | HTML/JSON/二进制等 | {"error":"not found"} (JSON) |
并发处理模型
模型 | 原理 | 优点 | 缺点 |
---|---|---|---|
多进程 | 每个请求由独立进程处理 | 隔离性好(如Apache) 崩溃不影响主进程 |
内存开销大,上下文切换慢 |
多线程 | 每个请求由独立线程处理 | 轻量级(如早期Tomcat) 共享内存 |
线程崩溃可能影响主进程 |
异步IO+事件驱动 | 单线程通过IO复用处理请求(如Nginx) | 高并发下性能优异 低内存消耗 |
编程复杂,依赖非阻塞IO |
协程 | 用户态轻量级线程(如Node.js) | 高吞吐量 避免回调地狱 |
需小心控制异步逻辑 |
静态与动态内容处理
类型 | 处理方式 | 技术示例 |
---|---|---|
直接读取文件并返回 | Nginx配置root 目录Apache别名(Alias) |
|
执行代码生成数据 | PHP-FPM、Node.js、Java Servlet | |
伪静态 | 动态URL重写为静态形式 | Apache mod_rewrite 规则 |
安全与性能优化
HTTPS加密
- SSL/TLS握手:客户端与服务器协商加密算法,服务器返回数字证书(含公钥)。
- 证书验证:客户端通过CA机构验证证书合法性,防止中间人攻击。
- 对称加密:握手后生成会话密钥(如AES)用于数据传输。
常见攻击与防御
攻击类型 | 防御手段 |
---|---|
DDoS | 限制IP访问频率 使用CDN分流 |
CSRF | 校验Referer/Token 设置SameSite属性 |
XSS | 转义输出内容 安全策略 |
问题与解答
问题1:HTTP/2相比HTTP/1.1有哪些性能提升?
解答:
- 限流策略:限制单个IP的请求频率(如Nginx的
limit_req
模块)。 - CDN分流:使用云服务商(如Cloudflare)吸收流量峰值。
- 黑白名单:封禁恶意IP,允许可信IP优先访问。
- SYN Cookie:防御TCP握手阶段的SYN洪泛攻击