短连接与长连接

Connection头部

  • Keep-Alive:长连接
    • 客户端请求长连接 : Connection: Keep-Alive
    • 服务器表示支持长连接 :Connection: Keep-Alive
    • 客户端复用连接
    • HTTP/1.1默认支持长连接:Connection: Keep-Alive无意义
  • Close:短连接
  • 对代理服务器的要求

    • 不转发Connection列出的头部,该头部仅与当前连接相关

      Connection仅针对当前连接有效

      user agent 与 origin server间有层层proxy代理
      image.png

      代理服务器对长连接的支持

      问题:各方间错误使用长连接

  • 客户端长连接

  • 代理服务器陈旧,不能正确处理请求的Connection头部,将客户端请求中的Connection: Keep-Alive原样转发给上游服务器
  • 上游服务器正确处理了Connection头部,在发送响应后没有关闭连接,而试图保持、复用与不认长连接的代理服务器的连接
  • 代理服务器收到响应中Connection:Keep-Alive后不认,转发给客户端,同时等待服务器关闭短连接
  • 客户端收到Connection:Keep-Alive,认为可以复用长连接,继续在该连接上发送请求
  • 代理服务器出错,因为短连接上不能发起两次请求。

    Proxy-Connection

  • 陈旧的代理服务器不识别该头部:退化为短连接,并原封不动转发给下游

  • 新版本的代理服务器理解该头部
    • 与客户端建立长连接
    • 与服务器使用Connection代替Proxy-Connection头部