从浏览器输入URL到网页加载完成,发生了什么?

这个我打算分为两部门来说。第一部分是从键盘输入到屏幕显示URL;第二部分是按下回车后,到页面加载的过程。

第一部分在(),本文将着重讨论第二部分。


一、DNS解析

DNS解析的过程是一个先在本地机器上找,然后去网络上找的过程。首先,会先去浏览器缓存中查找,没有就去本机的hosts文件找。如果都没找到相应域名的ip,那么就去网络上找。网络中查找的第一步就是先去本地的路由器找,本地路由器会有DNS缓存,如果路由器缓存中没有,那么就去ISP提供商的DNS服务器上找,一般在这里都能找得到。如果还没有,就去根域名服务器找,这个过程是基于UDP协议实现的递归查找。以www.baidu.com域名的解析为例。

ISP的DSN服务器先向根域名服务器询问, 你知道www.baidu.com的IP么?根域名服务器不负责管理具体的域名和Ip的关系,但是它知道管理.com这个域名的服务器的地址,于是就将.com域名服务器的地址发给ISP的DNS服务器,DNS服务器拿到.com域名服务器的Ip后,就去这个IP询问www.baidu.com这个域名的ip。这个.com域名服务器并不知道www.baidu.com的地址,但是它知道baidu.com域名服务器的地址。于是它将这个地址返回给ISP的DNS服务器,然后ISP的DNS服务器再去根据这个地址访问baidu.com的服务器,查询www.baidu.com的ip。


二、Socket发送http数据

有了IP之后,http协议的默认端口是80。有了端口和IP,那么就可以通过TCP协议的三次握手建立连接,然后通过socket发送HTTP数据。


三、服务器接受数据

服务器的有线程一直在监听相应的端口,有socket请求到达时候,就将请求做分发。这个时候有负载均衡的策略,Ngix根据相应 的负载均衡策略,将请求发送到不同的机器上。

四、服务器处理数据

SpringMVC中的DispatcherServlet拦截到请求,然后DispatcherServlet将HandlerMapping发送请求,HandlerMapping返回封装了执行链的handler给DispatcherServlet。然后DispatcherServlet再将Handler将给Handler Adapter,Handler Adapter执行handler,然后返回ModelAndView给DispatcherServlet。接下来DispatcherServlet将ModelAndView交给视图解析器,视图解析器返回相应的视图。然后视图交给Velocity渲染。

五、服务器返回数据

服务器通过socket发送response数据给浏览器。

六、浏览器收到数据

解析html构建dom树->构建render树->布局render树->绘制render树


你可能感兴趣的:(JAVA,Html)