浏览器从输入 URL 到页面显示内容,发生了什么
- 用户输入,如果是搜索内容,则首先合成 URL,如果是 URL,则进入下一步
- 浏览器进程通过进程间通信(IPC)把URL请求发送给网络进程
- 网络进程查找本地缓存是否包含该资源,如果有缓存资源,那么直接返回资源给浏览器进程,否则网络进程向web服务器发起http请求:
- DNS 解析,获取请求域名的服务器 IP 地址以及端口
- 利用 IP 地址和服务器建立 TCP 连接,建立连接后,浏览器端会构建请求行,请求头信息,并把和该域名相关的 Cookie 等数据附加到请求头中,然后向服务器发送构建的请求信息
- 服务器收到请求信息后,生成响应数据,包括响应行,响应头和响应体
- 网络进程接收到响应数据后,如果发现返回的状态码是 301 或 302,说明服务器需要浏览器重定向到其它 URL,重新开始,如果是 200,则继续处理请求
- 检查响应类型 Content-Type 字段,如果是字节流类型,则将该请求提交给下载管理器,流程结束,如果是 html 则通知浏览器进程准备渲染
- 浏览器进程会检查当前 URL 是否与之前打开的渲染进程根域名相同,如果相同,则复用之前的进程,否则开启新的渲染进程
- 渲染进程准备好后,浏览器向渲染进程发起“提交文档”信息,渲染进程接收到“提交文档”的消息后,会和网络进程建立传输数据的管道,获取数据后,向浏览器发送“确认提交”的消息
- 浏览器进程接受到“确认”消息后更新浏览器界面的状态,包括地址栏 URL、前进后退的历史状态,Web 页面内容等