0

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 响应的官方内容的任何精确细节。

我想通过最少的修改来解决这个问题,有什么线索吗?

杰拉德

4

0 回答 0