浏览器之从url到页面

# 概述

这是一个经典问题,先总结下,大致经历了以下过程:

  1. URL 解析
  2. DNS 解析
  3. 发起 TCP 连接
  4. 发送 HTTP 请求
  5. 服务器处理请求并返回 HTTP 报文
  6. 浏览器解析渲染页面
  7. 连接结束

每个过程简单分析如下:

  1. URL 解析
  • 地址解析
    • 判断输入的是一个合法的 URL 还是一个待搜索的关键词
    • 并且根据你输入的内容进行自动完成、字符编码等操作
  • HSTS
    • 由于安全隐患,会使用 HSTS 强制客户端使用 HTTPS 访问页面
  • 其他操作
    • 安全检查、访问限制【国内~】
  • 缓存检查
    • (Expires + cache-control / if-xxx)
  1. DNS 解析
  • 大致步骤是
    • browser -> OS -> router -> ISP -> RootDomain
    • DNS 劫持
      • DNS 劫持就是 dns 系统被入侵或人为的修改某些记录,如 A 记录,用专业的术语来讲就是通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原 IP 地址转入到修改后的指定 IP,其结果就是对特定的网址不能访问或访问的是假网址。
      • DNS 污染的原理: 现行标准中 DNS 查询通常使用 UDP 协议并且没有任何验证机制,并且根据惯例查询者会接受第一个返回的结果而抛弃之后的。因此只需监控 53 端口(DNS 标准端口)的 UDP 查询数据报并分析,一旦发现敏感查询,则抢先向查询者返回一个伪造的错误结果,从而实现 DNS 污染。 DNS 污染并无法阻止正确的 DNS 解析结果返回,但由于旁路产生的数据包发回的速度较国外 DNS 服务器发回的快,操作系统认为第一个收到的数据包就是返回结果,从而忽略其后收到的数据包,从而使得 DNS 污染得逞。
    • dns-prefetch 优化
      • <meta http-equiv="x-dns-prefetch-control" content="on">
      • <link rel="dns-prefetch" href="//www.zhix.net">
  1. 发起 TCP 连接
  2. 发送 HTTP 请求
  3. 服务器处理请求并返回 HTTP 报文
  4. 浏览器解析渲染页面
  5. 连接结束

# 参考