一、浏览器输入url后http请求返回的完整过程
二、网络协议分层
物理层主要作用是定义物理设备如何传输数据,机器的硬件,网卡端口,网线等。
数据链路层在通信的实体间建立数据链路连接,比如最基础的数据传输数据流,可以自己选择二进制或者ASCII码形式等。
网络层为数据在结点之间传输创建逻辑链路,比如输入百度,网络层会为我们找到百度的网址,如何寻找到的过程就是网络层要做的事。
传输层:向用户提供可靠的端到端(end-to-end)服务;传输层向高层屏蔽了下层数据通信的细节(比如一个post请求,如何分片如何发送使服务端很好接收到,这个规则由传输层实现,应用层的HTTP不用关心这些)。
应用层:为应用软件提供了很多服务,帮我们实现了HTTP协议,我们只要按照规则去使用HTTP协议;它构建于TCP协议之上;屏蔽了网络传输相关细节。
三、http协议发展历史
在最早的时候,第一个定稿的http协议是http/0.9版本,在这个版本里面,http协议,它的内容,非常非常的简单 只有一个命令,就是GET 对应的就是我们现在经常用到的get请求,post请求,这些统称为http的命令或者叫做方法,那么后面会有一节课会有详细的讲解,关于http命令的内容
然后那个时候是 没有header等描述数据信息的一些内容 因为那个时候它的请求是非常简单,它需要达到的目的也非常的简单,没有那么多不同的数据格式。
第三个,就是 服务器发送完内容之后,就把tcp链接给关闭了 在这里,大家需要去明确一点,就是我们这边提到的连接,跟我们http请求是不一样的,如果大家做过一些web开发,应该会听到一些,我们http请求的并发数这样的一些术语的描述。那么在这里面,我们要弄清楚一点就是http请求跟tcp连接它不是一个概念。在同一个tcp连接里面,我们可以发送很多个http请求,以前的协议版本是不能这么做的,但在现在在http1.1里面,我们是可以这么做了,而且在http2里面是会更大的去优化相关的一些东西,来提高我们http协议传输的一些效率,以及服务器的性能,所以这边tcp链接对应的是多个http请求。而一个http请求是肯定在一个tcp链接里面去进行发送的,所以这点概念要清楚
第二个版本就是http/1.0版本,这个版本跟我们现在在普遍使用的1.1其实已经差不了多少,在这个版本里面,它增加了很多命令,比如post,put,header这些命令,第二个是增加了status code 和 header相关的内容,code是服务端去处理某个请求之后,它的一个状态,而header对应的就是我们的不管是发送,还是请求的相关的一些数据,它的描述以及我们如何对这部分数据进行操作的方法,其它还增加了多字符集支持、多部分发送、权限、缓存等内容,那么这些东西能够更好的有利于我们去使用http请求,去实现我们一个web服务。
接下去就到我们http/1.1版本,这个版本只是在http/1.0上面增加了一些功能,来优化整个网络链接,在这个版本里面,它支持了持久连接,持久连接什么意思呢?在1.0版本里面,我们一个http请求,就要去发送,就要在客户端,服务端之间创建一个tcp链接,创建这个tcp链接之后在服务端返回内容之后,这个tcp链接就关闭掉了,那么这个成本是相对比较高的,因为在下一课我们会讲到,建立一个http链接的过程当中,我们要3次握手,那么这部分是在tcp协议里面去做掉的,所以我们不需要关心,但是我们要知道,在这个创建的过程它们的消耗是比较高的,延迟也会比较高,所以我们在建完了一个链接之后,它可以不关闭,那么以后新的http请求可以一直在这个链接里面进行发送的话,那么它的性能肯定会高很多,所以这个在http1.1里面,已经给我们去实现了