Web Socket Protocol Handshake vs. Switching Protoc

2019-03-14 22:15发布

问题:

I am a bit confused. Could somebody please explain to me what's the difference between these two response statuses:

HTTP/1.1 101 Web Socket Protocol Handshake

HTTP/1.1 101 Switching Protocols

Does it matter what response I get?

回答1:

There is no difference whatsoever. What is important is the 101 response code to indicate the handshake is progressing. This is defined in RFC 6455:

The leading line from the client follows the Request-Line format. The leading line from the server follows the Status-Line format. The Request-Line and Status-Line productions are defined in [RFC2616].

...

The handshake from the server is much simpler than the client handshake. The first line is an HTTP Status-Line, with the status code 101:

HTTP/1.1 101 Switching Protocols

Any status code other than 101 indicates that the WebSocket handshake has not completed and that the semantics of HTTP still apply.

The text of the Status-Line is arbitrary, the server can use whatever text it wants, per RFC 2616:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

...

The Status-Code element is a 3-digit integer result code of the attempt to understand and satisfy the request. These codes are fully defined in section 10. The Reason-Phrase is intended to give a short textual description of the Status-Code. The Status-Code is intended for use by automata and the Reason-Phrase is intended for the human user. The client is not required to examine or display the Reason-Phrase.

Switching Protocols just happens to be what the examples in RFC 6455 use, but that is not a requirement.