https://jmarshall.com/easy/http/#http1.1c4
我们可以在发送 100-continue 中间响应时添加任何标头。
但是我们可以在 Vert.x 代码中看到,当他要调用时continueHandler
,响应内容被忽略了,被扯掉了:
protected void doHandleResponse(HttpClientResponseImpl resp, long timeoutMs) {
if (reset == null) {
int statusCode = resp.statusCode();
if (followRedirects > 0 && statusCode >= 300 && statusCode < 400) {
Future<HttpClientRequest> next = client.redirectHandler().apply(resp);
if (next != null) {
next.setHandler(ar -> {
if (ar.succeeded()) {
handleNextRequest((HttpClientRequestImpl) ar.result(), timeoutMs);
} else {
handleException(ar.cause());
}
});
return;
}
}
if (statusCode == 100) {
if (continueHandler != null) {
continueHandler.handle(null);
}
} else {
if (respHandler != null) {
respHandler.handle(resp);
}
if (endHandler != null) {
endHandler.handle(null);
}
}
}
}
显然是因为处理程序不带任何参数。
响应被撕掉之前的调用:
private void checkHandleResponse() {
HttpClientResponseImpl resp;
synchronized (this) {
if (response != null) {
if (paused) {
return;
}
resp = response;
response = null;
} else {
return;
}
}
doHandleResponse(resp);
}
虽然规范对这一点并不精确,但我没有找到有关服务器 100-continue 响应的官方内容的任何精确细节。
我想通过最少的修改来解决这个问题,有什么线索吗?
杰拉德