Der Code Schnipsel unten ist die Implementierung von verifyServerhandshakeHeaders
Methode gefunden in WebSocketHandshake.java
.
public void verifyServerHandshakeHeaders(HashMap<String, String> headers) {
if (!headers.get("Upgrade").toLowerCase(Locale.US).equals("websocket")) {
throw new WebSocketException("connection failed: missing header field in server handshake: Upgrade");
} else if (!headers.get("Connection").toLowerCase(Locale.US).equals("upgrade")) {
throw new WebSocketException("connection failed: missing header field in server handshake: Connection");
}
}
Wie Sie sehen können, wenn der Server nicht enthält einen Upgrade-HTTP-Header in der Antwort der Öffnung Handshake (RFC 6455, 4. Opening Handshake), dieser Code wirft NullPointerException
.
Darüber hinaus, weil die headers
diese Methode bestimmte Instanz von new HashMap<String, String>()
(WebSocket.java :360
) erstellt wird, HTTP-Header vom Server gesendet muß case-sensitive obwohl die HTTP-Spezifikation sagt „Feldnamen sind Groß- und Kleinschreibung " (RFC 2616, 4.2 Message Headers). Wenn beispielsweise ein Server einen Upgrade-HTTP-Header in Großbuchstaben wie UPGRADE
sendet, löst TubeSock NullPointerException
aus, obwohl das Verhalten des Servers korrekt ist.
headers
Instanz sollte durch
new TreeMap<String, List<String>>(String.CASE_INSENSITIVE_ORDER)
erstellt werden, wie ich an einem bestimmten Ort aufgezeigt.
Die WebSocket-Implementierung von TubeSock verifiziert nicht einmal Sec-WebSocket-Accept
Header, obwohl die Verifizierung nach RFC 6455 erforderlich ist. Weitere Informationen finden Sie in RFC 6455, 4.1. Client Requirements.
Passiert das konsequent? Bist du hinter einem Proxy? Dies scheint zu erfolgen, wenn die richtigen HTTP-Header für das Upgrade auf eine WebSocket-Verbindung nicht festgelegt sind. – jonnydee
Ich habe Firebase erst gestern hinzugefügt und Update gepusht. Es stürzte für 1 Benutzer fast 12 mal. –
Ist der Stack-Trace immer gleich? Haben Sie mehr Informationen als nur diese Stack-Trace? Wenn ja, können Sie es teilen (oder teilen Sie es mit [email protected] mit, um es zu teilen)? –