HTTP 如何在 UDP 上工作(就 Google 的 QUIC 协议而言)?

HTTP 如何在 UDP 上工作(就 Google 的 QUIC 协议而言)?

以下是我对客户端-服务器 HTTP 服务器工作原理的理解。

  1. 客户端创建一个TCPsocket连接连接到服务器并发送数据。
  2. 服务器创建一个TCP套接字连接来监听传入的请求。

因此,客户端和服务器似乎都需要就使用的协议达成一致Transport protocol(在本例中为 TCP)。但如果我们希望网站通过 UDP/QUIC 协议运行,那么我们需要客户端和服务器都创建一个UDP套接字连接。但有些网站使用 TCP,而其他网站使用 UDP……

那么这是否意味着它需要看起来像这样?

if (URI == 'https://www.google.com') {
  // Website that works over UDP
  client.create.UDP.socket
  client.sendData

  server.create.UDP.socket
  server.receive.data
} else {
  // Website that works over TCP
  client.create.TCP.socket
  client.sendData

  server.create.TCP.socket
  server.receive.data
}

所以客户端需要记录哪些网站使用 TCP,哪些网站使用 UDP/QUIC,并创建那种套接字来与其通信?

答案1

HTTP 是动词和响应的编码。它可以在任何传输协议上运行,TCP、QUIC、SCTP。QUIC 针对 HTTP/2 进行了优化,但它确实可以作为通用传输工具

问题是 https:// URL 暗示 TCP,严格来说RFC 7230。因此,初始 TCP 响应中的 Alt-Svc 标头提供 quic 或升级到 http 2 或 3。curl 关于 HTTP 替代服务的说明可能会有帮助。

因此,当使用 QUIC 运行 Web 服务器时,您仍然需要监听 TCP,以便用户代理可以升级。不使用它不符合标准,并且存在实施问题,QUIC 工作组讨论

相关内容