一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
前言
之前我就一直好奇,为什么我在浏览器输入一个地址之后,就可以返回数据,这中间到底发生什么了呢?
于是我苦研技术二十年(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、Script三部分,各个浏览器内核渲染过程大同小异。
渲染的流程大概如下:
这就是一个完整版的流程啦!