一次完整的Http请求的过程:
1、对网址进行DNS域名解析,得到对应的IP地址
2、根据这个IP地址找到对应的主机,发起TCP三次握手
3、建立TCP连接后发起Http请求
4、服务器响应Http请求,并返回响应结果给客户端
5、客户端解析响应结果,(浏览器一半为HTML文件,移动设备一般是json数据)
6、客户端进行渲染
(1)DNS域名解析采用的是递归查询的方式,过程是,先去找DNS缓存->缓存找不到就去找根域名服务器->根域名又会去找下一级,这样递归查找之后,找到了,给我们的客户端
(2)为什么HTTP协议要基于TCP来实现? TCP是一个端到端的可靠的面相连接的协议,HTTP基于传输层TCP协议不用担心数据传输的各种问题(当发生错误时,会重传)
(3)DNS域名解析,首先会搜索自身的dns缓存,如果没有就搜索系统自身的dns缓存,如果没有就去host文件找缓存,如果还没有就去域名服务器去找,dns解析优化:dns缓存、dns负载均衡
(4)TCP连接(三次握手)
(5)建立连接后发起Http请求,HTTP请求报文包含:请求行、请求头、请求正文
请求行:请求方式、Http协议版本号、资源名称
请求头:用于描述客户端的一些配置信息,以及请求哪台主机
例如:keep-alive:true 代表本次http请求后不需要关闭tcp连接,这样下次Http请求就可以使用相同的TCP通道,节省tcp连接时间。
请求正文:当使用POST, PUT等方法时,通常需要客户端向服务器传递数据。这些数据就储存在请求正文中(GET方式是保存在url地址后面,不会放到这里)
(6)服务器接到HTTP请求,响应,HTTP响应也包括三部分:响应行、响应头、响应体
响应行:状态码,用于表示服务器对请求的处理结果
响应头:描述服务器的基本信息
响应体:服务器返回给客户端的基本信息
(7)浏览器解析HTML代码,并请求HTML中的资源
浏览器拿到HTML文件后,就开始去解析其中的HTML代码,遇到静态资源回去下载(会使用多线程),这时就用到了keep-alive,建立一次http连接,可以请求多个资源,因为浏览器是多线程请求资源,所以,显示顺序不一定。
(8)浏览器对页面进行渲染,
浏览器边解析,边渲染
总结:一次完整的HTTP请求主要是以下几步:
域名解析----》发起TCP的三次握手----》建立TCP连接发起HTTP请求-------》服务器响应HTTP请求,客户端得到响应---》客户端解析响应-------》客户端进行渲染呈现给用户。