1. 什么是HTTP?
探索HTTP首先要知道什么是HTTP?
http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
以上来自百度百科。
从百度百科中我们也可以知道HTTP是一个协议,并且是运行在TCP之上的(如果不知道什么是TCP可以看上一篇)。那么既然知道了是个协议,协议的理解就是双方交流的一种规定,规定双方交流时可以通过设定的协议进行交流,那么HTTP协议就是客户端与服务端进行交流的一种规定。
-
HTTP协议规定了双方可以实现的操作,例如GET、POST、PUT、DELETE.....,通过这些操作客户端可以对服务端的资源进行获取以及修改等;
-
HTTP协议还规定了客户端向服务端请求的方式,必须以http或者https为开头,比如www.baidu.com/,这样服务端才能识别这…
-
最后HTTP协议也规定了双方的响应消息以及状态码,可以理解为服务端执行了客户端的请求得到响应结果,服务器将响应结果返回给客户端,客户端收到响应结果,可以解析响应结果然后展示。响应结果中又包含了具体数据以及状态码等信息。状态码平时使用的比如200、404、400、500等都是一种状态码的规约,客户端可以根据这些状态码判断客户端收到请求后的执行状态,是否成功,以及是否异常等信息。
以上就是对HTTP协议的一种理解,总结为:客户端与服务器通过这样的一种协议实现了彼此之间的通信,客户端发送的请求服务端可以解析并执行响应的操作,最后将得到的结果返回给客户端,客户端收到响应消息并解析展示。
2. 浏览器请求数据的过程?
说完了HTTP协议,知道了HTTP协议是什么,那么就开始探索平时发一个HTTP请求到底会经过怎样的一个过程,看看HTTP之旅到底是不是很玄幻?
2.1 浏览器解析URL
探索第一站,浏览器站
第一站就是在我们发请求的浏览器,学过计算机网络的都知道,在互联网中寻找一个主机都是通过IP来寻找的,那么在网络层中路由器只能通过IP来寻找目的主机,那么我们如果输入www.baidu.com,路由器咋知道在哪个服务器,所以我们要在浏览器将www.baidu.com翻译一下,翻译成计算机网络中可以识别的地址,也就是IP。
浏览器中通过DNS服务器将我们输入的域名解析成计算机网络中可以识别的IP地址(如果你浏览器输入的是ip这里就当我没说直接跳到下一站。)
2.2 封装HTTP数据包
探索第二站,封装HTTP数据包站
封装HTTP数据包,首先知道什么是HTTP数据包,HTTP数据包由请求行、请求头部、空行和请求数据四部分组成。
请求行分为三部分:请求方法、请求地址和协议版本
-
请求方法:HTTP1.1定义的请求方法有八个
GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。 -
请求地址:也就是第一站解析到的地址它是由**<协议>://<主机>:<端口>/<路径>**组成
-
协议版本:也就是HTTP版本
请求头部就是我们打开浏览器查看Network中的查看到的RequestHeader。
请求数据呢就是我们发送的数据了。
所以这一站的总结就是将协议中需要的HTTP数据封装到我们请求中,然后到下一站。总结一句话对什么进行怎样的操作!
2.3 封装TCP数据包
探索第三站,封装TCP数据包站
上一站已经封装好了HTTP数据包那么能请求了吗?答案是不能,因为这时候才进入到网络中,那么进入到网络中就要经过传输层,在传输层中TCP就要起作用了。TCP登场!
封装TCP数据包,到底封装的是什么呢?如果知道TCP的就知道其实封装了TCP首部,在传输层需要对数据进行封装TCP首部,在TCP首部中包含了我要发送给服务器的各种信息,比如源端口、目睹端口、确认号、顺序号等等。可以看我另一篇文章详细分析计算机网络中的传输层。
这一站就到了传输层中,在传输层中被进行了TCP封装,携带着网络中需要的各种信息进入下一站。
2.4 建立TCP连接
探索第四站,建立TCP连接站
这一战就是建立连接的过程,因为上一站才封装好各种数据信息,但是客户端与服务端还没有连接呢,这一站就是将双方建立连接。既然建立连接那么就需要通过两种协议TCP和UDP,但是UDP不是面向连接的,所以呢我们就需要建立双方之间的TCP连接,也就是最熟悉的三次握手。具体的过程可以看我上一篇文章有具体的过程。
所以这一战就是建立连接的过程,这里依赖于传输层中的TCP建立连接,通过三次握手实现客户端与服务端的连接。
2.5 客户端发送请求
探索第五站,发送站
到了这里数据都封装好了,连接也建立好了,客户端终于可以发送请求了,这时候客户端就可以发送自己的HTTP请求了,因为彼此已经建立连接了所以客户端发送请求服务端也可以收到请求。
客户端发送了HTTP请求,就等着响应就好了,剩下的事就是服务端去做了。
2.6 服务端响应
探索第六站,服务端响应站
这一站就是服务端的事情了,服务器接收到客户端的请求,根据请求对相应资源执行客户端请求中的操作,客户端执行结束得到响应数据,然后服务端将响应数据返回给客户端,响应数据包含客户端想要的数据以及状态码。
这一站的总结就是服务端对客户端请求的资源执行get、post.....操作,得到响应数据返回给客户端。
2.7 客户端接收响应消息执行渲染
探索第六站,客户端接收响应消息站
客户端又登场了,服务端返回消息了,客户端要起来处理了,为啥要处理响应消息呢?举个🌰:
如果服务端返回了一个网页,如果不对这个网页做渲染,结果就是页面在浏览器展示是乱七八糟的,那么正常人怎么受得了,所以浏览器很负责的渲染好展示给我们。
这一站总结就是浏览器收到响应消息渲染最后展示给用户!
2.8 服务器关闭TCP连接
探索🏁站,关闭站
客户端与服务端都完成了彼此的任务,交互也结束了那么这个前面建立的TCP连接也可以关闭了,不然浪费资源啊,资源在计算机中是很宝贵的东西!
到这里整个从浏览器请求数据的全过程就结束了🔚,当然了这其中涉及到更细节的一些问题比如物理层、数据链路层、网络层等没有具体细说,这些知识还是后续再写吧!
到这里本该结束,那么了解了HTTP顺便了解下HTTPS吧!
3. 什么是HTTPS?
为什么我们有了HTTP还要用HTTPS呢?你会说提高安全性,那么为什么HTTP不安全呢?
这里我自己的一个浅显的理解就是HTTP对于数据都是明文传输,那么如果传输过程中数据包被劫持那么就可以通过数据包做一些bad things!所以这就需要HTTPS来保证安全性了!
HTTPS在HTTP基础上加入SSL协议,SSL协议依靠证书来验证服务器的身份,并对传输的数据进行加密,保障数据的安全性。这个过程大致为:发送HTTPS请求、得到返回证书、对证书验证、密钥交换、数据传输。