Http协议初步了解
做了2年android相关工作,实力、能力依然没有任何突破,是时候再重新开始,此时2015.10.14,离下班还有40分钟,记录Http学习内容。
1.Http协议是什么:是c/s模式下,通信的规则,比较复杂,定义了客户端和服务端的通信格式内容以及规则(例如文本显示优先于图片显示速度)等。属于应用层协议,中文翻译为超文本传输协议。
2.特点:无状态,基于Tcp(Https基于ssl安全层)连接,简单快速灵活,无连接。包括get,post,delete等请求方法,通常使用get,post。
3.版本为1.0,1.1版本,当前脑子中有印象的区别有:设置主机地址(setHost),,keep-alive选择。
4.过程:在连接之前先进行tcp/ip层连接,即三次握手过程,
1139 55.533990000192.168.50.149 220.181.112.244TCP 66 21087→80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1
1140 55.541251000220.181.112.244 192.168.50.149TCP 66 80→21087 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1440 WS=128 SACK_PERM=1
1141 55.541316000192.168.50.149 220.181.112.244TCP 54 21087→80 [ACK] Seq=1 Ack=1 Win=66240 Len=0
而后建立连接。
5.服务端或者客户端任一方中断传输都可能出现EOFExeception(未实际验证,只是之前有遇到过,加上这一次自身理解),一般在获取输入流过程中,接收到-1表示服务端传送数据完成(EOF = -1),客户端通过Tcp层向服务端发送
137 8.442380000192.168.50.149 220.181.112.244TCP 54 40067→80 [FIN, ACK] Seq=155 Ack=16385 Win=66240 Len=0
这样,服务端就中断了这次连接,一次Http请求完成。这也是为什么说http请求是无连接的。
6.对于keep-alive参数,并不是说这个http是长连接,只是在服务端设置时间内,不关闭当前TCP连接,下次Http请求不会再次三次握手协议了而已。通常试百度,新浪这些网站不会看到效果,因为这些网站流量巨大,设置长连接极其耗费服务器资源,所以都没有设置该参数且不支持长连接。
-----------------------------部分理解,以后陆续补充。2014.10.14 18:29
参考文章:http://www.cnblogs.com/azraelly/archive/2012/12/25/2832393.html