问题本质
HTTP 规范(RFC 7230)明确定义:Content-Length 必须为非负整数。若出现负值,属于严重协议违规,会导致以下问题:
-
客户端拒绝处理:浏览器、爬虫、API 客户端会直接丢弃响应或报错(如
ERR_CONTENT_LENGTH_MISMATCH)。 -
安全风险:可能被利用进行缓存投毒(Cache Poisoning)或请求走私(HTTP Request Smuggling)攻击。
-
服务端异常:部分服务器/框架会直接中断连接或抛出异常(如
InvalidContentLengthException)。
常见成因
1. 动态内容计算错误
python
# 错误示例:计算响应体长度时逻辑错误 content = generate_response() content_length = len(content) - 1000 # 可能产生负数! headers["Content-Length"] = str(content_length)
2. 整数溢出
java
// 错误示例:Java 中 int 类型溢出(最大值为 2^31-1 ≈ 2.14GB) long largeFileSize = 3000000000L; // 3GB > int 最大值 int intSize = (int) largeFileSize; // 溢出为负数! response.setContentLength(intSize);

最低0.47元/天 解锁文章
464

被折叠的 条评论
为什么被折叠?



