【发布时间】:2020-01-29 11:11:34
【问题描述】:
我需要将我的请求从 HTTP1.1 服务升级到 HTTP/2。 到目前为止,这是我尝试过的。
public class H2cUpgradeRequestInterceptor implements Interceptor {
private static final Log logger = LogFactory.getLog(H2cUpgradeRequestInterceptor.class);
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request upgradeRequest = request.newBuilder().addHeader("Connection", "Upgrade, HTTP2-Settings")
.addHeader("Upgrade", "h2c").addHeader("HTTP2-Settings", "AAMAAABkAARAAAAAAAIAAAAA").build();
Response upgradeResponse = chain.proceed(upgradeRequest);
if (upgradeResponse != null && upgradeResponse.code() == HttpStatus.SC_SWITCHING_PROTOCOLS) {
logger.debug("Switching Protocols success"); // Success. Got 101 in reply.
}
Response response = chain.proceed(request);
if (response.protocol() == Protocol.HTTP_2) { // This is returning HTTP1.1 as protocol
logger.debug("Used upgraded h2c protocol");
}
return response;
}
}
我的服务器启用了 h2c。在我的第一个chain.proceed() 电话中,我还收到了 101 个交换协议。但是即使切换协议成功,下一个proceed() 总是给我 HTTP1.1 作为协议。实现协议升级的正确方法是正确的吗?如果是的话,如何确保在切换协议成功后使用HTTP2?
【问题讨论】:
标签: java http okhttp interceptor