从URL到页面经历了什么? (2)| 青训营笔记

75 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

上次我们谈到了在什么情况下浏览器的网络进程会真正向目标服务器发起资源请求:

  • 本地没有缓存
  • 本地缓存已经过期且服务器资源产生更新

但在网络进程发起请求之前,网络进程首先会对浏览器进程传过来的URL进行解析;完整的URL的格式如下:

scheme://user:passwd@host:port/path?query1=value1&query2=value2#fragment

上面的是URL的完整格式,但是通常情况下,在URL中并不会包含如此多的参数。通常情况的URL格式如下:

scheme://domain/path?query1=value1&query2=value2#fragment

我们对这些参数进行一些解释:

  • scheme为使用的协议类型。常见的协议包括http,https,ftp,file,chrome等。通过不同的协议类型选择不同的端口号以及处理方式等。
  • ://为协议类型与后续参数之间的分隔标识符
  • domain为网站或资源的域名,如果为http,https等会经由DNS服务器解析后得到服务器的IP进行请求,如果为file等,会在本地进行资源的请求。
  • /path为所请求的资源在目标服务器中的路径。不同的层级之间通过添加/进行区分。
  • ?query1=value1&query2=value2为在请求中附带的参数。第一个参数使用?开始,不同的参数之间使用&分割。参数使用k-v键值对的形式提供。
  • #fragment为目标的锚点,浏览器在识别到锚点后可以跳转到页面的指定的位置。

其中最重要的过程是对URL中包含的协议scheme以及域名domain的解析。协议的解析关系到后续请求的处理方式,如目标服务器选择,端口号的确定等。域名的解析关系到后续具体向哪一个服务器发送请求。

端口号如果没有使用host:port的形式显式指定的话,网络进程会根据协议的不同自动选择默认的端口号,比如http协议对应的端口号为80https协议对应的端口号为443ftp协议对应的端口号为21。网络进程会根据这一步确定的端口号向指定的目标服务器发起连接请求。