HTTP协议首部字段transfer-encoding与content-length差异
2016-06-18 20:10
1466 查看
1. 什么问题
最近在写一个http代理,主要作用是接收客户端(JMeter)的http请求报文,解析报文后加密,发送到服务器。接收服务器响应,拼装http响应报文,响应客户端(JMeter)。但是JMter一直提示org.apache.http.MalformedChunkCodingException: Bad chunk header
2. 原因
响应客户端(JMeter)http报文实体首部使用的是transfer-encoding分块传输,但是http报文实体内容格式使用的content-length描述的实体内容。导致客户端(JMeter)解析有问题,以下是正确的报文格式。content-length首部字段描述的主体内容格式。
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/json;charset=UTF-8 Content-Length: 252 Date: Fri, 17 Jun 2016 02:30:33 GMT {"respCode":"999","respMessage":"失败"}
transfer-encoding首部字段描述的主体内容格式
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/plain Transfer-Encoding: chunked Date: Fri, 17 Jun 2016 02:30:33 GMT 25 This is the data in the first chunk 1A and this is the second one 0
3. 解决的方法
使用transfer-encoding首部字段描述的主体内容格式。4. 引出的知识点
两者之间的区别(cr lf统一表示:回车换行)content-length响应报文示例解释
HTTP/1.1 200 OK (什么协议/版本号 状态码 状态描述) Server: Apache-Coyote/1.1(服务:服务器名称) Date: Fri, 17 Jun 2016 02:30:33 GMT(日期) Content-Type: text/json;charset=UTF-8(实体内容类型:文本/JOSN格式;字符集) Content-Length: 252(实体内容长度:252)(备注:Content-Type和Content-Length属于实体首部) {"respCode":"999","respMessage":"失败"}(实体主体)
transfer-encoding响应报文示例解释
HTTP/1.1 200 OK(什么协议/版本号 状态码 状态描述, cr lf) Server: Apache-Coyote/1.1(服务:服务器名称, cr lf) Content-Type: text/plain(实体内容类型:文本/纯文本格式;字符集, cr lf) Transfer-Encoding: chunked(Chunked分块编码传输内容, cr lf) Date: Fri, 17 Jun 2016 02:30:33 GMT(日期, cr lf) cr lf 25(第一块数据内容十六进制的大小 cr lf) This is the data in the first chunk(第一块数据内容, cr lf) 1A(第二块数据内容十六进制的大小, cr lf) and this is the second one(第二块数据内容, cr lf) 0(0表示报文截止的标志, cr lf)
两者的区别主要是在主体实体之间有差异。
transfer-encoding与content-length的含义:
content-length:首部指示出报文中实体主体的字节大小(大小单位字节),注意主体实体内容的字节数与content-length字段的字节数不匹配会导致解析失败)
transfer-encoding:用于高手接收方已经用分块编码对报文进行了传输编码,分块编码是解决服务器动态创建内容,无法知道主体的长度。
相关文章推荐
- 基于JAVA中Jersey处理Http协议中的Multipart的详解
- PHP中Http协议post请求参数
- 【Nginx】MIME与mime.types
- HTTP协议理解与应用总结
- HTTP协议详解
- 详解Http协议
- 协议-HTTP协议详解
- iOS 网络通信02
- HTTP协议详解(转帖:非常经典)
- 用HTTP协议连接网络(HttpURLConnection)
- JavaWEB.HTTP协议(基础)
- 浅谈HTTP中Get与Post的区别(转)
- 网络知识---HTTP protocol
- http协议组成 讲解demo
- 用户登录具体实现与安全防范
- 用户登录具体实现与安全防范
- http协议常用请求头与响应头
- GET和POST乱码问题剖析
- (转)HttpClient 4.3.6 教程 前言 【翻译】
- Xcode7在运行包含HTTP协议的程序时报错解决方法 App Transport Security has blocked a cleartext HTTP (http)