前言
之前我就一直好奇,为什么我在浏览器输入一个地址之后,就可以返回数据,这中间到底发生什么了呢?
于是我苦研技术二十年(bus),终于把这中间发生了啥大概给理清楚了。接下来就一起来看看到底发生了啥子吧!
从大的方向来说,它做了这么几件事:
URL
解析CDN
查询TCP
连接(三次握手)HTTP
请求- 响应请求(四次握手)
- 渲染页面
那么我们来详细的说一下具体的实现步骤吧。
1、URL
解析:
一个 URL
包括 协议,网络地址,资源路径。
它会先检查你输入的地址是不是合法的。如果是不合法的地址,会转给默认的搜索引擎,例如如果你正在使用chrome,可以在URL
输入框输入你想要搜索的内容,然后搜索引擎会根据关键字进行搜索。
2、CDN
查询:
1、先在各种缓存信息中查找
例如:baidu.com
就是域名
首先,他会先去浏览器缓存
记录中查找------浏览器会缓存
DNS一段时间
系统缓存-----如果浏览器中没有找到,浏览器会有一个系统调用,获得系统缓存中的记录
路由器缓存-----接着将请求发给路由器,路由器一般也有自己的DNS缓存
2.DNS服务器查找
如果没有,则发送请求到本地域名服务器。每一个本地域名服务器都维护一个高速缓存,存放最近用过的域名及其IP地址。如果还没有则发出递归查询(本地服务器请求比他高一级的服务器,如此递归直到根域名服务器,肯定能找到这个服务器的IP地址)通过这个IP可以找到客户端到服务器端的唯一路径
。
3、 TCP
连接(三次握手)
确定好目标服务器的ip地址
和端口号
后,就开始和远程服务器建立 TCP
链接。
TCP
是一种面向有连接
的传输层协议。 它可以保证两端(发送端和接收端)通信主机之间的通信可达。 它能够处理在传输过程中丢包、传输顺序乱掉等异常情况;此外它还能有效利用宽带,缓解网络拥堵。
在确定目标服务器服务器的IP地址
后,则经历三次握手
建立TCP连接,流程如下:
4、 HTTP
请求
与服务器建立了连接后,就可以向服务器发起请求了。
在应用层,浏览器会分析这个URL
,并设置好请求报文发出。请求报文中包括请求行、请求头、空行、请求主体。HTTPS默认请求端口443
, HTTP默认80
。
5、 响应请求(四次握手)
当服务器接收到浏览器的请求之后,就会进行逻辑操作,处理完成之后返回一个HTTP
响应消息,包括:
状态行
响应头
响应正文
在服务器响应之后,由于现在HTTP默认开始
长连接keep-alive, 当页面关闭之后,TCP
链接则会经过四次挥手
完成断开。
四次挥手的流程大概如下:
6、渲染页面
浏览器收到响应资源后对响应资源做分析,根据响应头状态码做相应操作,如果资源压缩,需要进行解压,之后将资源缓存,之后根据资源MIME类型
去解析响应内容。
解析之后将内容渲染到页面上,渲染会分为HTML
、Style
、Scrip
t三部分,各个浏览器内核渲染过程大同小异。
渲染的流程大概如下:
这就是一个完整版的流程啦!