前言: web开发中HTTP协议是必须要懂的东西,这个东西虽然不难,但搞技术的人就是要一丝不苟,此文章仅代表鄙人的总结和理解,如有错漏,欢迎指正...
一、http协议的定义:
http(Hypertext transfer protocol)超文本传输协议,通过浏览器和服务器进行数据交互,进行超文本(文本、图片、视频等)传输的规定。也就是说,http协议规定了超文本传输所要遵守的规则。
二、HTTP协议的特点:
1)HTTP协议是无状态的
就是说每次HTTP请求都是独立的,任何两个请求之间没有什么必然的联系。但是在实际应用当中并不是完全这样的,引入了Cookie和Session机制来关联请求。
2)多次HTTP请求
在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,例如,CSS,JS文件,图片等等,还会自动发送HTTP请求这些需要的资源。现在的HTTP版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率。
3)基于TCP协议
HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。底层是基于TCP实现的。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。
三、一次完整的HTTP事务过程
基本流程:
a. 域名解析
b. 发起TCP的3次握手
1. 第一次握手:建立连接,客户端发送连接请求报文
2. 第二次握手:服务器收到客户端请求信息,发送报文给客户端
3. 第三次握手:客户端接收到报文,再发送信息给服务器成功状态
4. 第一次分手:主机1告诉主机2请求关闭连接
5. 第二次分手:主机2同意关闭连接,发送应答报文(此时主机2可能还有数据要传,2不能立刻关闭。)
6. 第三次分手:主机2的数据传完后,发送自己的关闭报文给主机1
7. 第四次分手:主机1收到主机2的关闭报文,发送最后应答给主机2。主机2得到最后应答就立即关闭了。最后主机1也关闭了
(服务器结束TCP连接的时间要比客户端早一些)
c. 建立TCP连接后发起http请求
d. 服务器端响应http请求,浏览器得到html代码
e. 浏览器解析html代码,并请求html代码中的资源
f. 浏览器对页面进行渲染呈现给用户
注意: HTTP是无状态的协议,即可以基于TCP也可以基于UDP,不过大部分实现都是基于TCP的。使用TCP,不用考虑数据包乱序,丢失这些问题,实现起来更简单,高效。
四、HTTP请求方法中Get和Post区别
1)Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
2)Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
3)Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
4)Get执行效率却比Post方法好。Get是form提交的默认方法。
5)GET产生一个TCP数据包;POST产生两个TCP数据包。(非必然,客户端可灵活决定)
更多关于通信协议相关的知识,请查看狐狸与小兔的专栏博客之【java开发通信协议篇】...
结语:以往都是看别人的博客进行学习技术,其中不乏有精华博客也有吊儿郎当的CV大法文章,所以决定将自己所学所用所整理的知识分享给大家,主要还是想为了后浪们少走些弯路,多些正能量的博客,如有错漏,欢迎指正,仅希望大家能在我的博客中学到知识,解决到问题,那么就足够了。谢谢大家!(转载请注明原文出处)