Relax the sanity check in HttpClientUpgradeHandler

Motivation:

HttpClientUpgradeHandler currently throws an IllegalStateException when
the server sends a '101 Switching Protocols' response that has no
'Upgrade' header.

Some servers do not send the 'Upgrade' header on a successful protocol
upgrade and we could safely assume that the server accepted the
requested protocol upgrade in such a case, looking from the response
status code (101)

Modifications:

- Do not throw an IllegalStateException when the server responded 101
  without a 'Upgrade' header
- Note that we still check the equality of the 'Upgrade' header when it
  is present.

Result:

- Fixes #4523
- Better interoperability
This commit is contained in:
Trustin Lee 2015-11-29 13:25:52 +09:00 committed by Norman Maurer
parent 0ec34b5f76
commit ef3a9b0acd

View File

@ -216,14 +216,9 @@ public class HttpClientUpgradeHandler extends HttpObjectAggregator implements Ch
} }
CharSequence upgradeHeader = response.headers().get(HttpHeaderNames.UPGRADE); CharSequence upgradeHeader = response.headers().get(HttpHeaderNames.UPGRADE);
if (upgradeHeader == null) { if (upgradeHeader != null && !AsciiString.contentEqualsIgnoreCase(upgradeCodec.protocol(), upgradeHeader)) {
throw new IllegalStateException( throw new IllegalStateException(
"Switching Protocols response missing UPGRADE header"); "Switching Protocols response with unexpected UPGRADE protocol: " + upgradeHeader);
}
if (!AsciiString.contentEqualsIgnoreCase(upgradeCodec.protocol(), upgradeHeader)) {
throw new IllegalStateException(
"Switching Protocols response with unexpected UPGRADE protocol: "
+ upgradeHeader);
} }
// Upgrade to the new protocol. // Upgrade to the new protocol.