0%

输入url到浏览器返回网页过程中发生了什么

how explorer works after typing URL

一道面试的经典问题,但其实也有很多地方值得探究。

DNS解析

DNS 服务器分为四类

  • 根域名服务器 (root Server)
  • 顶级域名服务器 (TLD Server)
  • 权威域名服务器 (Authoritative Server)
  • 本地域名服务器 (Local Server)

如某客户机想要获知域名为y.abc.com的主机IP地址,域名的解析过程(共使用8个UDP报文),如下:

  1. 客户机向其local Server发出DNS请求报文
  2. local Server收到请求后,查询本地缓存,如果没有该记录,则以DNS客户的身份向root Server发出解析请求
  3. root Server收到请求后,判断该域名属于.com域,将对应的TLD顶级域名服务器dns.com的IP地址返回给local Server
  4. local ServerTLD(顶级域名服务器)发出解析请求报文
  5. TLDdns.com收到请求后,判断该域名属于abc.com域,故将对应的Authoritative Serverdns.abc.com的IP地址返回给local server
  6. local Server向权威域名服务器dns.abc.com发起解析请求报文。
  7. Authoritative Serverdns.abc.com收到请求后,将查询结果返回给local Server
  8. local Server将查询结果保存到本地缓存,同时返回给客户机

常见DNS记录类型:

  • A: 地址记录(Address),返回域名对应的 IP 地址
  • NS: 域名解析服务器记录(Name Server),如果要将子域名指定某个域名服务器来解析,需要设置NS记录。
  • AAAA: 对应的 IP 地址为 IPV6。
  • CNAME: 域名的别名,好处是当域名发生变化时,用户侧的访问方式可以不发生变化。

HTTP连接

  我们在浏览器输入 http://www.baidu.com 之后,按下回车键,地址会变为 https://www.baidu.com,按一下`F12`看一下network,我们会发现状态码是302,那这里到底做了什么呢?

  由于我们键入的是 http,所以浏览器会首先找到服务器的80端口,进行tcp 连接,然后服务器会返回一个301/302状态码,表示重定向,同时在服务器响应头还会添加HTTP-Strict-Transport-Security, 简称HSTS,里面有 max-age,用户访问时,服务器种下这个头,下次如果使用http访问,只要max-age未过期「客户端检验」,客户端会进行内部跳转,可以看到307Redirect Internel 的响应码。然后就直接变成和443端口建立连接,走https连接。
  所以,下次看到状态码如果是307,说明对应的网站的max-age还没到期,浏览器内部进行了跳转,直接和服务器的443端口进行连接了。

HTTPS的连接全过程

阮文峰的博客写的介绍得很清楚:
SSL/TLS介绍
协议运行机制
为何需要数字证书

简而言之,https = tls/ssl + http
HTTP的传输实际上是两个过程:

  1. 验证过程,使用RSA非对称加密+Hash算法;
    • 客户端给出版本协议号、一个客户端生成的随机数Random以及客户端支持的加密方式;
    • 服务器端确认双方使用的加密方式和加密通信协议版本,并给出数字证书「包含了服务器的公钥」,以及服务器生成的一个随机数Random
    • 客户端确认数字证书的有效性,然后生成一个新的随机数,并且这个随机数使用数字证书中的公钥加密,发给服务器,客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的Hash值,用来供服务器校验。
    • 服务器使用自己的私钥,进行解密。然后通知客户端握手阶段结束,同时将之前的信息 Hash后发给客户端,让客户端校验。

  至此,验证过程就结束了,客户端会和服务器根据约定的加密方式,使用前面三个随机数,生成“对话密钥”,然后根据这个对话密钥进行对称加密,传输数据。

  1. 传输过程,使用AES对称加密。