输入URL到页面呈现的过程

1、域名解析

       输入www.baidu.com敲响回车,浏览器检查了输入框这不是我要的呀,我只认识IP浏览器缓存你来帮我翻译一下这是什么鬼,浏览器对不起我这没有,请找一下系统缓存,系统缓存查找系统中的hosts文件,对不起没有,请找一下路由器缓存,路由器缓存路由器映射表,对不起没有,请找一下本地DNS服务器,本地DNS服务器对不起没有,我发给更高级的DNS服务器找一下,首先会发送到根域名服务器查找,返回顶级域名服务器的IP地址,再请求顶级域名服务器IP返回二级域名服务器IP,再请求二级域名服务器IP返回三级域名服务器IP,直到找到对应的IP地址,返回给浏览器。
       负载均衡:DNS返回的IP地址每次都是不一样的,如果每次都一样是否说明你请求的资源都位于同一台机器上面,那么这台机器需要多高的性能和储存才能满足亿万请求呢?但是在用户的眼中,它需要的只是处理他的请求,哪台机器处理请求并不重要。DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡,又叫做DNS重定向。

输入URL到页面呈现的过程_第1张图片
负载均衡

2、建立TCP连接

       终于等到你,还好我没放弃,拿到IP地址后的浏览器尾巴翘上了天,兄弟我来了,通过传输层的TCP协议向远端服务器发起连接请求,也就是著名的三次握手:
(1)客户端->服务端:你好,我们可以交朋友吗?(SYN=1,seq=x)
(2)服务端->客户端:可以,你再想想你是不是确定要交朋友?(SYN=1,ACK=1,seq=y,ack=x+1)
(3)客户端->服务端:确定了老哥,我们做朋友吧!(ACK=1,seq=x+1,ack=y+1)
ACK:响应标识,1表示响应,连接建立成功之后,所有报文段ACK的值都为1
SYN:连接标识,1表示建立连接,连接请求和连接接受报文段SYN=1,其他情况都是0
FIN:关闭连接标识,1标识关闭连接,关闭请求和关闭接受报文段FIN=1,其他情况都是0,跟SYN类似
seq number:序号,一个随机数X,请求报文段中会有该字段,响应报文段没有
ack number:应答号,值为请求seq+1,即X+1,除了连接请求和连接接受响应报文段没有该字段,其他的报文段都有该字段


输入URL到页面呈现的过程_第2张图片
三次握手过程

3、HTTP请求

       我去前面探探路,小提莫终于把路探好了,可以开始通汽车了。小汽车上装着HTTP Request请求报文,滴滴滴到服务器,服务器收到请求后会发出应答,即响应数据。 HTTP请求报文格式:请求行+请求头+空行+消息体,请求行包括请求方式(GET/POST/DELETE/PUT)、请求资源路径(URL)、HTTP版本号。
       SSL/TLS协议基本思路是采用公钥加密法(最有名的是RSA加密算法)。大概流程是,客户端向服务器索要公钥,然后用公钥加密信息,服务器收到密文,用自己的私钥解密。为了防止公钥被篡改,把公钥放在数字证书中,证书可信则公钥可信。公钥加密计算量很大,为了提高效率,服务端和客户端都生成对话秘钥,用它加密信息,而对话秘钥是对称加密,速度非常快。而公钥用来加密对话秘钥。
       https协议需要到CA申请证书,大多数情况下需要一定费用:
1、Http是超文本传输协议,信息采用明文传输,Https则是具有安全性SSL加密传输协议。
2、Http和Https端口号不一样,Http是80端口,Https是443端口。
3、Http连接是无状态的,而Https采用Http+SSL构建可进行加密传输、身份认证的网络协议,更安全。
4、Http协议建立连接的过程比Https协议快。因为Https除了Tcp三次握手,还要经过SSL握手。
5、连接建立之后数据传输速度,二者无明显区别。

       https的请求过程

1、客户端将自己支持的加密算法发送给服务器,请求服务器证书。
2、服务器选取一组加密算法,并将证书返回给客户端。
3、客户端校验证书合法性,生成随机对称密钥,用公钥加密后发送给服务器。
4、服务器用私钥解密出对称密钥,返回一个响应,HTTPS连接建立完成。
5、随后双方通过这个对称密钥进行安全的数据通信。

       Charles原理

1、客户端向服务器发起HTTPS请求
2、Charles拦截客户端的请求,伪装成客户端向服务器进行请求
3、服务器向“客户端”(实际上是Charles)返回服务器的CA证书
4、Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
5、客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
6、Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
7、服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
8、Charles拦截服务器的响应,替换成自己的证书后发送给客户端
至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。
原文链接:https://blog.csdn.net/zwjemperor/java/article/details/80719427

4、HTTP响应

       小汽车到达了远方,满载而归。 HTTP响应报文格式:状态行+响应头+空行+消息体,状态行包括HTTP版本号、状态码、状态说明。

5、断开TCP连接

       天下无不散之筵席,兄弟我走了。四次分手:
(1)客户端->服务端:好了,我也该回去了(FIN=1,seq=u)
(2)服务端->客户端:可以,稍等我一下,我检查一下有没有你的东西还给你(ACK=1,seq=v,ack=u+1)
(3)服务端->客户端:可以了,你的东西已经快递给你了,拜拜了(FIN=1,ACK=1,seq=w,ack=u+1)
(4)客户端->服务端:好的,期待下一次再来做客,拜拜(ACK=1,seq=u+1,ack=w+)


输入URL到页面呈现的过程_第3张图片
四次挥手

6、浏览器渲染界面

       浏览器浏览器在收到HTML,CSS,JS文件后,进行解析。浏览器解析HTML文件时会自上而下,起初产生一个DOM树,解析CSS之后产生CSS规则树,后将两树进行融合,合成为渲染层,最后绘制出我们看到的画面。

你可能感兴趣的:(输入URL到页面呈现的过程)