• 浏览器端发送 HTTP 请求流程的完整过程
    • 构建请求
    • 查找缓存
    • 准备 IP 地址和端口
    • 等待 TCP 队列
    • 建立 TCP 连接
    • 发起 HTTP 请求
  • 服务器端处理 HTTP 请求流程
    • 返回请求
    • 断开连接
    • 重定向

  • 为什么站点第二次打开速度会很快?

    • DNS 缓存:浏览器本地把对应的 IP 和域名关联
    • 页面资源缓存:简要流程如下
      • 首次访问时,服务器端返回 HTTP 响应头给浏览器,浏览器通过 Cache-Control 字段来设置是否缓存该资源。缓存过期时长 Max-age 参数。
      • 再次请求资源,尚未过期,则会直接返回缓存中的资源给浏览器。
      • 再次访问资源,已经过期,浏览器会继续发起网络请求,并在 HTTP 请求头上添加 If-None-Match,服务器端收到请求头后,根据 If-None-Match 的值判断请求的资源是否有更新。没有更新则返回 304 状态码;有更新就返回最新的资源给浏览器。
  • 登录状态如何保存?

    • 浏览器发起登录 POST 请求
    • 服务器验证用户登录信息,正确后会生成一段表示用户身份的字符串,并添加到响应头的 Set-Cookie 字段中,返回响应头给到浏览器
    • 浏览器接收到响应头,解析后发现存在 Set-Cookie 字段,就会把这个字段信息保存在本地
    • 用户再次访问时,浏览器发起 HTTP 请求,并将之前保存的 Cookie 数据写进请求头中的 Cookie 字段里,发送请求头给到服务器
    • 服务器接收到带有 Cookie 字段的请求头,根据 Cookie 信息查找到该用户已经是登录状态,生成含有该用户的页面数据,并返回给浏览器
    • 浏览器接收到数据后,正确展示用户登录的状态信息