浏览器输入网络地址发生了什么

240 阅读3分钟

浏览器输入网络地址发生了什么

此问题是面试的“长驻”问题,考察的知识面也比较广。

如:浏览器进程线程 网络通信 渲染引擎工作原理

经过这些问题可以拓展更深度的问题。

如:网络安全 同源策略 HTTP缓存 SSL/TLS HTTP不同版本的差异 Event Loop 预加载、懒加载 Cookie

可拓展的比较多,之后会陆续总结相关知识。希望多多支持~~~谢谢大家🤡🤡🤡

浏览器进程、线程

1. 输入URL

用户在浏览器地址栏中输入URL,如https://www.example.com/index.html

2. 解析URL

浏览器进程首先解析URL,识别出协议(HTTPS)、域名(www.example.com)、路径(/index.html)和查询字符串 和 查询字符串(如果有)。

3. DNS 查询 IP 地址

因为网络通信时,一般会是由TCP/IP协议,所以需要吧域名转换成IP进行网络通信。

浏览器通过DNS(域名系统)将域名转换为IP地址。这一过程通常包括:

  • 检查本地缓存:浏览器首先检查本地DNS缓存。
  • 查询操作系统缓存:如果不在本地缓存,浏览器请求操作系统缓存中的记录。
  • host文件:如果操作系统缓存也没有,就查询host配置文件。
  • 网络查询:如果一首都没有,请求会被发送到本地DNS服务器,后者可能递归查询根域名服务器、顶级域名服务器、权威域名服务器,直到获得IP地址。

4. 建立TCP连接

使用获取到的IP地址,浏览器通过TCP三次握手与服务器建立连接。如果是HTTPS,还需进行TLS/SSL握手,以确保数据传输的安全性。

5. 发送HTTP/HTTPS请求

建立连接后,浏览器构造HTTP或HTTPS请求头,包含请求行(如GET /index.html HTTP/1.1)、请求头部(如User-Agent、Accept-Language等)和可能的请求体(POST请求时)。

6. 服务器处理请求

服务器收到请求后,根据请求的资源类型(HTML、CSS、JavaScript等)和路由(如/index.html),进行处理。这可能涉及数据库查询、服务器端脚本执行(如PHP、Node.js)等。

7. 服务器响应

服务器准备响应内容,包括状态码(如200 OK)、响应头部(如Content-Type、Content-Length)和响应体(网页内容)。如果是动态生成的内容,这一步可能涉及模板渲染等。

8. 数据传输

响应数据通过之前建立的TCP连接传输给浏览器。如果是分块传输或使用了HTTP/2的多路复用,数据可以更高效地传输。

9. 渲染页面

浏览器接收到来自服务器的响应数据后:

  • 解析HTML:构建DOM(文档对象模型)树。
  • 加载CSS:根据CSS规则计算样式,形成CSSOM(CSS对象模型)。
  • 合并DOM与CSSOM:生成渲染树(Render Tree),决定页面布局。
  • 布局与绘制:计算元素几何位置,进行像素绘制,最终在屏幕上呈现页面。此时可能会产生重绘、回流

10. 加载其他资源

页面中的图片、脚本、样式等外部资源会根据HTML中的引用顺序加载。JavaScript可能阻塞渲染或修改DOM,影响后续资源的加载和执行。

11. 交互与后续请求

页面加载完成后,用户可以与页面交互。交互过程中可能触发AJAX请求、Websocket通信等,实现动态内容更新或实时通讯。

关于 Vue 相关的问题可以阅读一下文章!

Vue 双向绑定原理

Vue Computed 原理