请求的一生

本篇讲述:当你在浏览器中输入http://www.baidu.com并按下回车,世界是如何到你面前的。

解析 URL

浏览器通过你输入的 http://www.baidu.com 进行解析,得知:

  • 协议:http
  • 域名: www.baidu.com
  • 资源: /

进行 DNS 查询

  1. 检查浏览器缓存的 DNS 记录
  2. 检查操作系统 Hosts 中是否存在记录
  3. 查询本地 DNS 服务器
  4. DNS 服务器向上级 DNS 服务器查询,直到得到目标服务器的 IP 地址

使用 socket

浏览器查询到了目标服务器的 ip 地址后,通过 sockct 链接远程服务器的 ip 地址以及 http 协议默认端口号 80 ,客户端会准备一个 tcp 包,送往服务端。 在通信过程中,客户端会与服务端多次建立(三次握手)、断开连接(四次挥手),使用 Https 协议时进行 tls 握手。

三次握手

四次挥手

TLS 握手

  • 客户端发送一个 Client hello消息到服务器端,消息中同时包含了它的TLS版本,可用的加密算法和压缩算法。
  • 服务器端向客户端返回一个 Server hello消息,消息中包含了服务器端的TLS版本,服务器选择了哪个加密和压缩算法,以及服务器的公开证书,证书中包含了公钥。客户端会使用这个公钥加密接下来的握手过程,直到协商生成一个新的对称密钥
  • 客户端根据自己的信任CA列表,验证服务器端的证书是否有效。如果有效,客户端会生成一串伪随机数,使用服务器的公钥加密它。这串随机数会被用于生成新的对称密钥
  • 服务器端使用自己的私钥解密上面提到的随机数,然后使用这串随机数生成自己的对称主密钥
  • 客户端发送一个 Finished消息给服务器端,使用对称密钥加密这次通讯的一个散列值
  • 服务器端生成自己的 hash 值,然后解密客户端发送来的信息,检查这两个值是否对应。如果对应,就向客户端发送一个 Finished消息,也使用协商好的对称密钥加密
  • 从现在开始,接下来整个 TLS 会话都使用对称秘钥进行加密,传输应用层(HTTP)内容

发送 http 请求

通过 http 协议向www.baidu.com 发送一个 get 请求,获取服务器上的 html 资源,通过返回的 html 浏览器解析器内容,并下载其中的资源文件,如 js、css 等。

渲染页面

浏览器通过 js,css,html 资源来渲染页面。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×