3 Protocol Details
This section is divided into two parts. The first part defines the protocol roles and processing for RPC over HTTP v1. The second part deals with roles and processing for RPC over HTTP v2. The next paragraph specifies how the roles are assigned.
A client node SHOULD be capable of using both RPC over HTTP v1 and RPC over HTTP v2 protocol dialects. A client node SHOULD try to use the RPC over HTTP v2 protocol dialect first; if that fails, it SHOULD fall back to the RPC over HTTP v1 protocol dialect, unless it has knowledge obtained outside this protocol that RPC over HTTP v1 will not work. In this case, it MUST return an implementation-specific error to a higher-level protocol and not try RPC over HTTP v1.<18>
A server node SHOULD be capable of listening and responding to both RPC over HTTP v1 and RPC over HTTP v2 protocol dialects at the same time using the same network address and endpoint. Once a TCP/IP connection to it is established, the server MUST use the first PDU that it receives to determine whether the given TCP/IP connection will be used as part of an RPC over HTTP v1 virtual connection or an RPC over HTTP v2 virtual connection. If the server receives any RTS PDU, it MUST assume that this TCP/IP connection is part of an RPC over HTTP v2 virtual connection. If the first PDU the server receives on a given TCP/IP connection is an RPC PDU and not an RTS PDU, it MUST assume that the TCP/IP connection is part of an RPC over HTTP v1 virtual connection.
All proxies SHOULD be capable of listening and responding to both RPC over HTTP v1 and RPC over HTTP v2 requests at the same time using the same URL. If a proxy receives an HTTP request with an RPC_CONNECT method, it MUST use the RPC over HTTP v1 protocol dialect and act as mixed proxy for this particular HTTP request. If it receives an HTTP request with the RPC_IN_DATA method, it MUST use the RPC over HTTP v2 protocol dialect and it MUST act in the inbound proxy role for this particular HTTP request. If a proxy receives an HTTP request with the RPC_OUT_DATA method, it MUST use the RPC over HTTP v2 protocol dialect and it MUST act in the outbound proxy role for this particular HTTP request.
When a proxy receives a message in a protocol dialect that it does not implement, it SHOULD process the message exactly as it processes any other message that it does not understand for the protocol dialects that it does implement. The processing rules for each protocol dialect are specified throughout this section.