这是一道非常经典的面试题,需要对网络应用是如何工作有一个层次化的认知,涉及到浏览器、HTTP协议、网络服务器等相关知识。在这里只发表下个人初步的理解。
-
在浏览器地址栏输入目标网站的URL
例如: https://www.baidu.com/
域名解析,查找域名对应的IP地址
1.浏览器缓存——浏览器会缓存DNS记录一段时间。
2.系统缓存——如果在浏览器缓存里没有找到需要的记录,浏览器会调用系统缓存中的记录(windows系统存储在host文件中)。
3.路由器缓存——将查询请求发向路由器,一般会有自己的DNS缓存。
4.ISP DNS 缓存——即向互联网服务提供商(电信、联通等)查找。
5.如果经历以上四步还无法找到对应IP,则向根域名服务器查找域名对应IP地址。根域名服务器把请求转发到下一级,直到找到对应IP。与服务器建立连接并给web服务器发送一个HTTP请求
浏览器根据连接到web服务器(一般为TCP/IP协议),向服务器发送请求,发送请求的过程中,浏览器会向Web服务器以Stream(流)的形式传输数据,告诉Web服务器要访问服务器里面的哪个Web应用下的Web资源。-
服务器处理请求
服务器(常见的有 Apache、Nginx、IIS、Lighttpd)接收到浏览器传输的数据后,开始解析接收到的数据,生成HTML文件并返回给浏览器。 浏览器处理
HTML字符串被浏览器接受后被一句句读取解析。
解析到link标签后重新发送请求获取css
解析到script标签后发送请求获取js,并执行代码
解析到img标签后发送请求获取图片资源
浏览器根据HTML和CSS计算得到渲染树,绘制到屏幕上,js会被执行。