org.apache.http.protocol.ResponseConnControl からの評価に応じて、"Connection: Keep-Alive" ヘッダーと "Keep-Alive: timeout=x, max=y" ヘッダーを応答に追加する HttpResponseInterceptor を追加できます。 Connection: close" ヘッダー、必要に応じて。
class ResposeKeepAliveHeaderMod implements HttpResponseInterceptor {
@Override
public void process(HttpResponse response, HttpContext context)
throws HttpException, IOException {
final Header explicit = response.getFirstHeader(HTTP.CONN_DIRECTIVE);
if (explicit != null && HTTP.CONN_CLOSE.equalsIgnoreCase(explicit.getValue())) {
// Connection persistence explicitly disabled
return;
}else{
// "Connection: Keep-Alive" and "Keep-Alive: timeout=x, max=y"
response.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_KEEP_ALIVE);
response.setHeader(HTTP.CONN_KEEP_ALIVE, "timeout=30, max=100");
}
}
}
ResponseConnControl の後に、これを HttpProcessor に追加する必要があります。
HttpProcessor httpProcessor = HttpProcessorBuilder.create()
//.addFirst(new RequestTrace())
.add(new ResponseDate())
//.add(new ResponseServer("MyServer-HTTP/1.1"))
.add(new ResponseContent())
.add(new ResponseConnControl())
.addLast(new ResposeKeepAliveHeaderMod())
.build();
次に、サーバーを構築します。
final HttpServer server = ServerBootstrap.bootstrap()
.setListenerPort(9090)
.setHttpProcessor(httpProcessor)
.setSocketConfig(socketConfig)
.setExceptionLogger(new StdErrorExceptionLogger ())
.setHandlerMapper(handle_map)
.create();