网站访问速度优化

本文最后更新于:2023年8月21日 中午

域名

为了更好地理解域名、DNS 等内容首先抛出一个技术向的问题(当然可以跳过不看),这个问题也经常是面试问题:当你在浏览器中输入 URL(Uniform Resource Locator)回车之后发生了什么?比如我在浏览器中输入了 https://xyzlab.ai/index.html,根据 URI 标准,它由以下几个部分组成:

  • 传输协议(https)
  • 域名(xyzlab.ai)
  • 路径(/index.html)
  1. 根据域名获取服务器的 IP 地址,也称 DNS 解析
    DNS 就像一本很大的表格,记录了域名所对应的 IP 地址,首先浏览器中会有一个 DNS 缓存器,会记录我们之前一段时间访问记录中域名指向的 IP 地址,浏览器会现在自己的 DNS 缓存中查找这个域名,如果浏览器缓存中不存在,则会去系统缓存中查找,如果没有会去到路由器 DNS 缓存中查找目标域名与 IP 的映射,如果没有才会去 ISP (Internet Service Provider)的 DNS 查找。

  2. 浏览器向服务器的 IP 端口号发起 TCP 三次握手建立连接

  • 先从客户端,这里指浏览器向服务端发送连接请求报文并进入 SYN_SENT 状态,让服务器知道我要发起连接,等待服务器确认
  • 等到服务器收到 SYN 包接受连接后回复一个 SYN + ACK 包并为这次连接分配资源,表示服务器知道你要发送数据,并且准备好接收数据,此时服务器进入 SYN_RECV 状态;
  • 客户端接收到 SYN + ACK 包后也向服务端发送确认包 ACK 并分配资源,当 ACK 包发送完毕之后,客户端与服务端进入 ESTABLISHED 状态,完成三次握手,这样 TCP 连接就建立了。
  1. 浏览器向服务器发送 HTTP 请求报文

  2. 服务器根据 HTTP 请求报文的参数找到请求的资源

  3. 服务器给浏览器发送 HTTP 响应报文,把资源返回给客户端
    常用的状态码:
    200:OK 成功
    302:Found 临时重定向
    400:Bad Request 请求报文中存在语法错误
    403:Forbidden 访问被拒绝
    404:Not Found 没找到
    500:Internal Server Error 服务器内部错误
    503:Service Unavailable 服务器超负载或在维护

  4. 浏览器渲染页面

  5. 通过四次挥手释放 TCP 连接

  • 客户端发送中断连接请求,也就是发送 FIN 结束报文。这个时候客户端就进入了 FIN_WAIT 状态,等待服务端的 FIN 报文。
  • 服务端发送 ACK 报文,服务端进入关闭状态,此时服务端会向上层应用发送通知,表明客户端数据已经发送完毕,是否需要发送数据给客户端了。
  • 当服务端确定数据发送完毕之后,就可以向客户端发送 FIN 报文了。
  • 客户端接收到 FIN 报文之后,知道服务端要准备断开连接了,客户端给服务端发送 ACK 报文之后进入 TIME_WAIT 状态,告诉服务端可以断开连接了,如果服务端没有收到 ACK 报文就重传,当服务端收到 ACK 报文之后就可以断开连接了。当客户端一段时间没收到回复,就知道服务端已经关闭,所以自己也可以关闭连接了。

CDN


网站访问速度优化
http://example.com/posts/44205.html
作者
司马吴空
发布于
2023年8月21日
许可协议