我使用jetty,本地tomcat和远程tomcat部署相同的战争。 对于同样的要求:
对于码头和当地的tomcat,一切都很好,我得到了完整的答复。
远程tomcat响应状态为200但空体。
我不知道在哪里看,为什么会有这种差异
如果您可以提供另一种方式来查询URL(可以是部署该应用程序的网络的公共或本地),我将很高兴听到它。
代码
private void get(String proxiedURIString, HttpServletResponse resp) throws IOException, ServletException {
HttpURLConnection connection = getHttpURLConnection(proxiedURIString, resp);
fillHeaders(resp, connection);
try {
IOUtils.copy(connection.getInputStream(), resp.getOutputStream());
} catch (IOException e) {
String message = String.format("Unable to parse response : %s", proxiedURIString);
LOGGER.error(message);
resp.sendError(500, message);
} finally {
resp.getOutputStream().flush();
connection.disconnect();
}
LOGGER.info("Successfully proxied URI : {}", proxiedURIString);
}
private static void fillHeaders(HttpServletResponse resp, HttpURLConnection connection) {
Map<String, List<String>> headers = connection.getHeaderFields();
for (String header : headers.keySet()) {
if(header == null || headers.get(header) == null) {
continue;
}
for (String headerValue : headers.get(header)) {
if(headerValue == null) {
continue;
}
resp.addHeader(header, headerValue);
}
}
}
private static HttpURLConnection getHttpURLConnection(String proxiedURIString, HttpServletResponse resp) throws ServletException, IOException {
HttpURLConnection connection = null;
try {
URL url = new URL(proxiedURIString);
connection = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
String message = String.format("Unable to contact : %s", proxiedURIString);
LOGGER.error(message);
resp.sendError(404, message);
}
return connection;
}
编辑:编辑代码以仅使用输入/输出流。另外,为了提供更多信息,我通过apache http服务器联系远程tomcat,响应体很大。
Edit2:更多信息。我将代理的URI映射为一个发送少得多的数据,这次我得到了每个配置的完整答案。