【发布时间】:2022-01-15 15:39:26
【问题描述】:
我有一个 angular Web 应用程序,它使用 Spring Boot 并在后端嵌入了 tomcat 服务器。我想让已建立的 http 连接保持更长时间,以提高后续 http 请求的响应时间。使用http/1.1,浏览器被告知通过将Connection: Keep-Alive 和Keep-Alive: timeout=5, max=1000 之类的东西添加到response header 来保持http 连接。但是,特定于连接的标头字段,例如 Connection 和 Keep-Alive are prohibited in HTTP/2。因此,Chrome 和 Firefox 在 HTTP/2 响应中会忽略它们。对于 HTTP/2,特定于连接的元数据应该是 conveyed by other means。
我在任何地方都找不到那些“其他手段”应该是什么。我也找不到任何地方如何配置嵌入式 Tomcat 9 服务器以将 Keep-alive 元数据添加到 HTTP/2 响应。这就是tomcat现在的配置方式:
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
return (tomcat) -> tomcat.addConnectorCustomizers((connector) -> {
if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
AbstractHttp11Protocol<?> protocolHandler = (AbstractHttp11Protocol<?>) connector
.getProtocolHandler();
protocolHandler.setDisableUploadTimeout(false);
protocolHandler.setConnectionUploadTimeout(5000);
protocolHandler.setKeepAliveTimeout(4000);
protocolHandler.setMaxKeepAliveRequests(200);
protocolHandler.setUseKeepAliveResponseHeader(true);
}
});
}
但如果我想使用HTTP/2,这些设置将不起作用。有什么想法吗?
【问题讨论】:
标签: spring-boot tomcat http2 keep-alive