一个浏览器是如何工作的?

URL 从输入到显示的流程

简写:DNS -> HTTP/HTTPS -> 缓存 -> 回馈报文 -> 构建 DOM -> 计算 DOM 上的 CSS -> 回流和重绘

HTTP/HTTPS 协议

HTTP

基于 TCP 协议出现,在 TCP 协议上规定了 Request-Response 的模式,该模式决定了通讯必定是由浏览器端发起的。

HTTPS

流程:

  • 客户端向服务端发送 SSL 请求
  • 服务端接收到请求后,产生一对公钥和私钥,将公钥发给 CA,拿到数字证书
  • 将携带公钥的数字证书发给客户端
  • 客户端拿到公钥后,将对称加密的密钥用公钥加密后,发给服务端
  • 服务端用私钥解密后拿到对称加密的密钥
  • 就可以正常通信了

安全的原因

如果没有数字证书,服务端直接将公钥发给客户端,此时如果有中间人截获,把自己的公钥发给客户端,客户端拿到后将密钥加密,中间人拿到后用自己的私钥解密,拿到了密钥,然后用从服务端拿到的公钥加密后,发给服务端。此时就达成了中间人攻击。

HTTP Head

  • Accept:浏览器接受的格式
  • Accept-Encoding:浏览器接收的编码方式
  • Accept-Language:浏览器接收的语言,用于判断多语言
  • Connection:连接方式,如果是 keep-alive,且服务端支持,会复用连接
  • ……

HTTP 1.x/2

HTTP/2 前身

谷歌推行的 SPDY

1.x 和 2 区别

  • 服务端推送:能够将客户端发送第一个请求到服务端时,提前把一部分内容推送给客户端,放入缓存,可避免客户端请求顺序并行度不高导致的性能问题
  • 多路复用:允许同时通过单一的 HTTP/2.0 连接发起多重的请求-响应,而 HTTP/1.1 当同一域名下请求超过一定数量限制,超过的会被阻塞
  • 二进制分帧:在应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层,在其中会将传输信息分割为更小的消息和帧
  • 首部压缩:HPACK 算法