-
Web and HTTP:
web page: 由一些对象组成,对象可以是HTMl文件,JPEG图像,JAVA小程序,声音剪辑文件等.HTML文件还可能包含若干对象的引用,通过URL对每个对象进行引用.
-
无状态HTTP:
- 协议层面:服务器不保存客户端上下文信息,每个请求独立处理
- 技术表现:缺少自动的会话跟踪机制(需通过 Cookie/Session 人工实现)
- 好处:降低服务器内存开销,简化故障恢复机制,提升横向扩展能力
- 现实: Cookie(客户端状态存储)Session(服务端状态映射)JWT(分布式状态令牌)
# 无状态请求示例 GET /page1 HTTP/1.1 GET /page2 HTTP/1.1 # 服务器无法自动关联两个请求 # 有状态模拟(通过 Cookie) GET /page1 HTTP/1.1 Cookie: sessionid=abc123 GET /page2 HTTP/1.1 Cookie: sessionid=abc123 # 服务器通过 Cookie 关联会话 -
非持久HTTP和持久HTTP:
-
非持久 HTTP (HTTP/1.0)
sequenceDiagram Client->>Server: TCP 握手 Client->>Server: GET /index.html Server->>Client: 返回资源 + 关闭连接 Client->>Server: 新 TCP 握手 Client->>Server: GET /style.css Server->>Client: 返回资源 + 关闭连接
性能损失:
- 平均每个对象增加 2×RTT(握手+请求)
- 现代网页含 50+ 资源时延迟呈指数增长
-
持久HTTP/1.1 Keep-Alive
Connection: Keep-Alive Keep-Alive: timeout=5, max=100# 伪代码示例 connection = create_tcp_connection() for i in range(max_requests): send_request(connection) receive_response(connection) if timeout_reached: break close_connection(connection)
-
流水线 vs 非流水线
-
非流水线(默认模式):
timeline title 非流水线请求时序 Client : 请求1 -> 等待响应1 -> 请求2 Server : 处理请求1 -> 响应1 -> 处理请求2 -
流水线模式:
timeline title 流水线请求时序 Client : 请求1 -> 请求2 -> 请求3 Server : 处理请求1 -> 响应1 -> 处理请求2 -> 响应2 -
对比分析表:
特性 非流水线 流水线 网络利用率 低(RTT 间隙) 高(连续发送) 实现复杂度 简单 复杂(需缓存响应) 队头阻塞 无 严重 错误恢复 容易 困难