我编写了一个调度程序,它将请求路由到后端服务器,来自后端的响应是加密的。当我解密响应体并写入RoutingContext响应时。客户端无法收到响应。
代码如下
Router router;
router.routeWithRegex(patter).failureHandler(this::onFailure).handler(this::onRequest);
private void onRequest(Routing context){
...
HttpClient client = vertx.createHttpClient(new HttpClientOptions());
HttpClientRequest requestToBackend =
client.request(method, port, backendHost, uri, backendRsp -> onBackendResponse(context, backendRsp));
context.request().handler(body -> handleReq(requestToBackend));
context.request().endHandler((v) -> requestToBackend.end());
}
private void onBackendResponse(RoutingContext context, io.vertx.core.http.HttpClientResponse backendRsp) {
....
backendRsp.handler(data -> {
byte[] decrypt = decrypt(data);
context.request().response().write(data); // this works fine
// context.request().response().write(Buffer.buffer(decrypt)); // change to this, client can't receive response then
});
backendRsp.endHandler((v) -> context.request().response().end());
}发布于 2022-03-10 10:31:26
最后,我更改了响应体(比原版更短),但没有修改标题“内容长度”。所以客户继续等..。
https://stackoverflow.com/questions/71406313
复制相似问题