输入URL到浏览器显示页面过程中都发生了什么
流程1-输入地址
chrome会先匹配历史记录、书签等,另外如果是文本而非地址 会直接重定向到google.com/search?q=xxx
流程2-域名解析到对应的IP
1、浏览器先查看 hosts文件(mac下是/etc/hosts),如果有匹配到对应ip,则直接使用这个ip
2、 hosts文件没有对应ip。 浏览器发起DNS请求到本地的DNS服务器,通常是移动、联通运营商等,运营商先从缓存取,如果取不到再查询DNS根服务器,然后分配到一个指定的域名服务器进行DNS解析查询,最终返回给浏览器。
具体看 这个图片
DNS解析还有可能会被劫持污染,看我另外一篇文章 关于DNS解析
流程3-浏览器发送HTTP请求到服务器
1、请求到80端口 经过网卡、防火墙走到网关/Nginx服务器/应用程序
2、建立TCP/IP连接 这里会经历3次握手和4次挥手过程
3、 此时服务器判断是否要进行302 301重定向 Location字段返回对应的重定向url
流程4-服务器处理
1、接收到TCP报文,解析封装成HTTP Request对象;
2、Nginx服务器/应用程序进行处理
3、服务器进行响应
流程5-浏览器展示页面
以webkit为例, css和dom的渲染是由webcore完成,js的解释和执行是由jscore完成
- 解析html构建dom树; 另外这个阶段还会异步进行图片等资源的下载
- 下载、解析css为cssom
- dom+cssom 配合来构建渲染树并渲染到屏幕中
- js下载、解析、执行
- 这个阶段如果script标签没有做defer、async、放到body下面的话,会阻塞dom的渲染(如document.write)
- js解析是由js解释器完成 如V8、jscore
- js的执行其实就是事件循环: 主要包含执行栈和任务队列
相关文章
https://juejin.cn/post/6905931622374342670#comment
https://zhuanlan.zhihu.com/p/133906695 从输入 URL 到页面展示到底发生了什么?看完吊打面试官!
https://zhuanlan.zhihu.com/p/27628685 认识 V8 引擎
Tags: