java—向httpservletresponse添加头会增加响应时间

gstyhher  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(255)

我正试图通过postman测试restapi。调用restapi(get req a)时,向另一个服务发出内部httpget请求(get req b),解析该服务的xml响应,修改它并将其作为原始请求(get req a)的响应发送回去。
我想将内部http请求(get req b)的响应头设置为原始请求(get req a)的响应头。

ServletOutputStream os = response.getOutputStream();
                    try
                    {
                        XMLOutputter outputter = new XMLOutputter();

                        // For loop for copying headers 
                        Header [] headers = req.getResponseHeaders();
                        for (Header h : headers) {
                            LOG.info("Setting headers");
                            response.addHeader(h.getName(), h.getValue());
                        }

                        outputter.output(dashTrimmer.getDocument(),os);
                        response.setStatus(statusCode);
                        os.flush();
                        os.close();
                        LOG.info("Trimmed File sent");
                        return;
                    } catch (IOException e) {
                        LOG.info(e.getMessage());
                    } catch (Exception e) {
                        LOG.info(e.getMessage());
                    }
                    response.setStatus(statusCode);
                    return;

在下面的代码中,有一个for循环,用于将所有头从内部http请求(get req b)复制到原始get请求(get req a)的httpservletresponse中。
当我注解掉for循环时,原始请求的响应时间约为250ms。
当存在for循环时,响应时间约为20秒。在postman中,响应代码200在~1s内收到,而在logs中,我可以看到请求在~1s内发送的logstation“trimmed file sent”。但连接仍处于活动状态,请求未完成。
这种行为的原因可能是什么?我该如何修复它?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题