URL解析

1、解析协议:浏览器提取URL中的协议部分,以确定使用的通信协议,比如http、https、ftp。

2、解析主机名:浏览器会将主机名解析为IP地址,才能知道要和哪个服务器建立网络连接。这个过程就是DNS解析

3、解析端口号:比如一些web服务器默认http服务的端口号是80

4、解析路径:主机名和端口号之后的就是路径部分,这部分是用来确定请求的资源路径

5、解析查询参数:URL中还可能有带一些参数

DNS解析

1、本地DNS缓存:浏览器先检查本地的DNS缓存,看是否命中这个IP地址

2、操作系统的DNS缓存:浏览器本地DNS缓存没有命中的话,就会查询操作系统中DNS缓存。

3、DNS服务器查询:以www.baidu.com为例

  • 本地DNS服务器:浏览器向本地DNS服务器发起DNS请求,如果命中则返回IP。
  • 根域名服务器:本地服务器没有命中,则向根域名服务器发起查询.com这个顶级域名服务器的IP
  • 顶级域名服务器:本地服务器得到顶级域名服务器的IP后,向其发起下一级域名的请求,也就是“baidu.com”这个下一级域名
  • 下一级域名服务器:本地服务器获取到“baidu.com”的IP后,继续请求“www.baidu.com”的IP
  • 最终浏览器就得到了对应的IP,当然在上面这些查询过程中,本地域名服务器、浏览器DNS缓存、操作系统DNS缓存都会把结果缓存下来。

建立网络连接

TCP三次握手

浏览器获取到目标服务器的IP地址后,就尝试与其建立TCP连接。TCP连接是一个可靠的协议,它是靠三次握手建立连接的:

  • 第一次握手:客户端向服务器发送一个SYN包(同步序列编号),等待服务器响应
  • 第二次握手:服务器端收到SYN后向客户端发送一个SYN+ACK包(同步序列号+确认序号)
  • 第三次握手:客户端收到包后,发一个ACK包,确认连接已建立

为什么要有三次握手?

因为TCP建立的是可靠的连接,就是必须双方都确认可以通信,如果只有2次握手:

  • 第一次握手后,客户端发送

HTTP请求

TCP连接建立完成之后,浏览器就会发送http请求到服务端。

http和https的区别

客户端发送请求

服务端响应请求

客户端响应response并渲染页面