前言
公司需要使用Java Agent,对返回HTML请求的响应体进行修改.达到无侵入的插入前端JS探针.
但是再修改完请求体之后,页面出现了卡死/白屏/文件下载错误的情况.
分析之后是由于修改响应体之后没有正确的设置Content-Length导致.
Content-Length是什么
在一次HTTP请求中,使用十进制表示的八位字节的数目,这个数目是包含了所有的编码内容.如果响应体使用了gzip进行压缩.那么Length的长度是指压缩后的长度的
错误的Content-Length将会导致什么情况
- 无响应直到超时
- 响应体被截断
不确定的Content-Length怎么处理
使用Transfer-Encoding: chunked在请求头进行表明
此时所有的分块数据需要在每个块的开头进行标识当前分块的大小(十六进制),大小后会有\r\n
进行标识并在结束的位置也有\r\n
终止块的长度为0并只含有一个\r\n