浏览器一次完整的请求过程

  1. 浏览器检验URL, 判断协议, 解析域名

    1. dns 域名解析 : 浏览器缓存 - 本地host文件 - 本地dns 缓存 - 运营商dns 缓存 - 根域名服务器 - 顶级域名服务器 - 二级域名服务器 - ip返回到浏览器 (512字节) - 使用ip地址发起请求
  2. 建立 tcp 连接

    1. 三次握手 syc(发起同步) -> ack + syc (响应上一个请求,再发一个同步) -> ack + syc(响应上一个请求,确认同步)
  3. 建立http 连接

    1. http 协议

      1. 按请求格式解析请求内容

      2. http版本

      3. 请求方法

      4. 请求参数

      5. 请求头

    2. https 协议 ( http +ssl )

      1. ssl 协议

        1. 证书加密 : 非对称加密

        2. 数据加密 : 对称加密

  4. 请求到达反向代理服务器, 根据配置的负载算法进行分配, 请求转发到对应的服务器

  5. 服务器的php-fpm中, master进程负责监听请求, 空闲的worker竞争accpt请求获得本次请求处理; 如果没有空闲的worker, 根据fpm的配置回收空闲的子进程, 或者创建新的子进程

  6. worker连接到php程序, 接收并解析请求参数

  7. php接收到请求, 假设使用了mvc框架, 会进行路由解析

  8. (待补充)

  9. 找到对应的控制器, 方法

  10. 因为php是解释型语言, 系统会读取对应的php脚本到缓冲区

  11. Zend引擎对脚本进行语法分析, 输出Opcode(操作码), 如果开启了opcache对操作码进行缓存

  12. 执行操作码, worker得到执行结果, 关闭请求; worker又回到空闲状态, 等待下一次请求

  13. master负责监听请求, 使用共享内存读取worker状态, 监听到worker完成请求

  14. master将结果转发给反向代理服务器

  15. 反向代理服务器返回数据到用户主机

  16. 浏览器根据文件头决定行为, 下载文件, 渲染 还是解析脚本

  17. 样式相关

    1. 浏览器解析html 会生成DOM树, 请求资源文件

    2. css 解析样式表,生成CSS规则树

    3. 将 CSS Rule Tree 附着到DOM Tree 上

    4. 发生渲染

      1. 发生reflow : 布局

      2. repaint (重排和重绘) : 外观被改变

  18. js 脚本 : 和dom 同步解析

worker处理请求的细节: https://blog.csdn.net/ST091ZSC/article/details/102150576


补充: 使用 dig +traceroute命令查看dns解析的过程

  1. www.taobao.com. 等价于www.taobao.com, 省略了最高级域名

  2. www.taobao.com. 指向别名 www.taobao.com.danuoyi.tbcache.com.

  3. www.taobao.com.danuoyi.tbcache.com.解析得到两个ip : 47.246.16.234 和 47.246.16.233 , 默认使用第一个

  4. cname 指的是别名记录, 使用cname可以解耦ip和访问域名的联系, 且支持了多域名访问同一ip地址

  5. A记录, 指的是域名和ip之间的映射

  6. NS记录, 指的是域名对应的dns解析器的映射

  7. AAAA记录会将域名指向ipv6的ip地址

➜  ~ dig www.taobao.com

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.taobao.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 760
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.taobao.com.                        IN      A

;; ANSWER SECTION:
www.taobao.com.         75      IN      CNAME   www.taobao.com.danuoyi.tbcache.com.
www.taobao.com.danuoyi.tbcache.com. 60 IN A     47.246.16.234
www.taobao.com.danuoyi.tbcache.com. 60 IN A     47.246.16.233

;; Query time: 1 msec
;; SERVER: 183.60.82.98#53(183.60.82.98)
;; WHEN: Mon Dec 06 14:42:13 CST 2021
;; MSG SIZE  rcvd: 109

接着trace路径

D:\>tracert -h 100 -4 www.taobao.com

Tracing route to www.taobao.com.danuoyi.tbcache.com [14.215.57.233] # 解析转移到www.taobao.com.danuoyi.tbcache.com这个别名,说明www.taobao.com.danuoyi.tbcache.com还存在其他ip
over a maximum of 100 hops:

  1     *        *        *     Request timed out.
  2     2 ms     1 ms     1 ms  172.17.1.137
  3     2 ms     1 ms     1 ms  10.0.16.1
  4     1 ms     1 ms     1 ms  172.17.140.109
  5     2 ms     1 ms     1 ms  172.17.140.210
  6     1 ms    <1 ms    <1 ms  172.17.1.1
  7     1 ms     1 ms     1 ms  10.10.10.1
  8     1 ms     *        *     172.16.1.2
  9     4 ms     3 ms     3 ms  172.16.1.244
 10     2 ms     4 ms     2 ms  172.16.3.1
 11     *        5 ms     4 ms  172.16.3.12
 12     3 ms     2 ms     2 ms  172.16.1.253
 13     *        *        *     Request timed out.
 14     5 ms     5 ms     5 ms  202.104.167.225
 15     8 ms     *       11 ms  125.176.37.59.broad.dg.gd.dynamic.163data.com.cn [59.37.176.125]
 16     6 ms     5 ms     5 ms  113.98.6.57
 17    33 ms     8 ms     8 ms  113.108.208.26
 18    10 ms    10 ms     9 ms  94.96.135.219.broad.fs.gd.dynamic.163data.com.cn [219.135.96.94]
 19    11 ms    11 ms    11 ms  14.215.32.178
 20     7 ms     8 ms     7 ms  14.215.57.233

你可能感兴趣的:(浏览器一次完整的请求过程)