业务中需要将用httpUtils请求返回的headers全部返回,塞到HttpServletResponse中,代码如下:
HttpServletResponse response;
// 返回headers
Arrays.stream(httpResponse.getHeaders()).forEach(header -> response.setHeader(header.getName(), header.getValue()));
一、发现问题:
塞到HttpServletResponse中之后,发现headers中缺少"Content-Length"和"Content-Type"两个参数。
使用http直接请求,和使用本项目代理请求对比,发现最后headers中缺少"Content-Length"和"Content-Type"。
二、查找问题
看源码发现遇到这两个特殊字段时,分别赛到了setContentType和setContentLength中
三、解决问题
所以需要再遍历时候重新赛回去
for (Header header : httpResponse.getHeaders()) {
if ("Content-Type".equalsIgnoreCase(header.getName())) {
response.setContentType(header.getValue());
} else if ("Content-Length".equalsIgnoreCase(header.getName())) {
response.setContentLength(Integer.valueOf(header.getValue()));
} else {
response.setHeader(header.getName(), header.getValue());
}
}