target = "https://www.rfc-editor.org/rfc/rfc9001#section-8.1" # 8.1. Protocol Negotiation # # QUIC requires that the cryptographic handshake provide authenticated # protocol negotiation. TLS uses Application-Layer Protocol # Negotiation [ALPN] to select an application protocol. Unless another # mechanism is used for agreeing on an application protocol, endpoints # MUST use ALPN for this purpose. # # When using ALPN, endpoints MUST immediately close a connection (see # Section 10.2 of [QUIC-TRANSPORT]) with a no_application_protocol TLS # alert (QUIC error code 0x0178; see Section 4.8) if an application # protocol is not negotiated. While [ALPN] only specifies that servers # use this alert, QUIC clients MUST use error 0x0178 to terminate a # connection when ALPN negotiation fails. # # An application protocol MAY restrict the QUIC versions that it can # operate over. Servers MUST select an application protocol compatible # with the QUIC version that the client has selected. The server MUST # treat the inability to select a compatible application protocol as a # connection error of type 0x0178 (no_application_protocol). # Similarly, a client MUST treat the selection of an incompatible # application protocol by a server as a connection error of type # 0x0178. [[spec]] level = "MUST" quote = ''' Unless another mechanism is used for agreeing on an application protocol, endpoints MUST use ALPN for this purpose. ''' [[spec]] level = "MUST" quote = ''' When using ALPN, endpoints MUST immediately close a connection (see Section 10.2 of [QUIC-TRANSPORT]) with a no_application_protocol TLS alert (QUIC error code 0x0178; see Section 4.8) if an application protocol is not negotiated. ''' [[spec]] level = "MUST" quote = ''' While [ALPN] only specifies that servers use this alert, QUIC clients MUST use error 0x0178 to terminate a connection when ALPN negotiation fails. ''' [[spec]] level = "MAY" quote = ''' An application protocol MAY restrict the QUIC versions that it can operate over. ''' [[spec]] level = "MUST" quote = ''' Servers MUST select an application protocol compatible with the QUIC version that the client has selected. ''' [[spec]] level = "MUST" quote = ''' The server MUST treat the inability to select a compatible application protocol as a connection error of type 0x0178 (no_application_protocol). ''' [[spec]] level = "MUST" quote = ''' Similarly, a client MUST treat the selection of an incompatible application protocol by a server as a connection error of type 0x0178. '''