版权声明:转载请标明原博客地址 https://blog.csdn.net/shuijianbaozi/article/details/84589893
最近用socket实现http post请求的时候,遇到一个问题,返回的数据是这样的
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Content-Length: 118
Date: Wed, 28 Nov 2018 09:46:16 GMT
{"ret":0,"data":[{"url":"http://XXXXX/file/c449d2e1793244c0a9e163bef9638cb7.mp3"}],"type":1}
解释:
1. {}存放返回的数据包体,{}显示为空;此时Content-Length: 2
2. 如何拿到数据包体呢?根据以下文章,可以根据下文中提到的\r\n\r\n,判断响应头结束,然后再拿到json数据
前言
原文地址:https://blog.csdn.net/nimasike/article/details/81122784
http连接
短连接
定义:http头不包含Connection: Keep-Alive
socket读取数据值返回-1者标记为结束
长连接
定义:http头包含Connection: Keep-Alive
http协议结构
头
头结束符定义:包含这"\r\n\r\n" 四个字节是指头结束
如果头数据里包含Content-Length: x 就读取x字节数据,知道http响应数据的长度为x
如果头数据里不包含Content-Length: x 类型为Transfer-Encoding: chunked 说明响应数据的长度不固定,结束符已"\r\n0\r\n"这5个字节为结束符
body
http协议数据响应的内容
流程图
wireshark抓包解析