QUIC是快速UDP网络连接(英语:Quick UDP Internet Connections)的缩写,是一种基于UDP协议实现的应用层可靠传输协议。目前已经被确定为HTTP 3.0标准(RFC 9000和RFC 9114)。
在传统的HTTP服务中,通常服务端需要对指定端口进行TCP协议的监听,客户端/浏览器尝试对使用IP和端口与服务端建立连接。在过去的http1和http2时代,都是HTTP协议都是基于TCP进行服务,通常是80和443端口。而对于http3(quic),监听的协议是UDP,端口一般为443。而作为较新的http3协议,大多数服务端是不支持的,客户端也不会主动去探测服务端是否支持了http3(quic)服务。那么如何告知客户端服务器支持quic呢?
其实很简单,这边引入了替代服务(alternative service, Alt-svc:)的概念,只要在客户端来请求http1或者http2的时候,告知本服务端的某个端口用其他协议可以支持同类的服务。具体的,在响应给客户端的头部添加Alt-Svc头,对本服务器支持的情况进行说明,详细的定义可以参考文档RFC7838。
如响应头Alt-Svc: h3=":443";ma=2592000,表示服务端的443端口支持http3,有效期为2592000秒,即30天。
更进一步的,由于quic协议经过长期发展至今,到目前为止迭代了许多的版本,主要分为gquic(GOOGLE QUIC)和iquic(IETF QUIC),那么如何告知服务器所支持的quic版本呢?可以参考下面两个例子:
(1)对于iquic格式为:
Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
表示443端口支持h3-v1版本和h3-29版本协议,有效期为2592000秒,两个协议中间以逗号区分。
(2)对于gquic格式为:
Alt-Svc: quic=":443";ma=2592000;v="43,46"
表示443端口支持gquic的43、46版本,有效期为2592000秒。