1、Http底层竟然是TCP,用wireShark抓包get和post请求
get方式的报文发送格式:
响应格式:
post请求方式报文发送格式:
响应格式:
2、若Connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;
若connection 模式为keep-alive,则该连接会保持一段时间,在该时间内可以继续接收请求;http 1.0中默认是关闭的,需要在http头加入"Connection: Keep-Alive",才能启用Keep-Alive;
http 1.1(1997年发明,till today)中默认启用Keep-Alive,如果加入"Connection: close ",才关闭。
目前大部分浏览器都是用http1.1协议,也就是说默认都会发起Keep-Alive的连接请求了,所以是否能完成一个完整的Keep- Alive连接就看服务器设置情况
3、post:请求参数是在http请求体部分以key/value形式传输的,get是在地址后接参数,post是把参数放在了请求体里:
text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml
application/octet-stream 流文件格式上传
application/json json文件格式上传
application/x-www-form-urlencoded http普通的表单请求,请求体中只有参数没有文件
multipart/form-data mutipart格式的表单上传,请求体中既有参数也有文件 的multipart表单上传。
5、User-Agent:用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。6、一个TCP连接现在可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的。这就是Content-length字段的作用,声明本次回应的数据长度。
Content-Length: 3495
6、由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法。
Content-Encoding: gzip
Content-Encoding: compress
Content-Encoding: deflate
gzip是 GNU zip 的缩写,它是一个 GNU 自由软件的文件压缩程序,也经常用来表示 gzip 这种文件格式。
deflate是同时使用了 LZ77 算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
7、http1.1客户端请求的头信息新增了Host字段,用来指定服务器的域名
Host:192.168.0.126:8080
参考资料:
https://github.com/jeasonlzy/okhttp-OkGo/wiki/%E4%BC%A0%E5%8F%82%E4%B8%8E%E6%8A%93%E5%8C%85(%E5%BF%85%E7%9C%8B)
http://www.cnblogs.com/ranyonsue/p/5984001.html
http://www.ruanyifeng.com/blog/2016/08/http.html
https://zhuanlan.zhihu.com/p/24913080
http://a280606790.iteye.com/blog/1095085