You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot与iOS Swift端TLS握手缓存30秒超时延长方案咨询

TLS会话复用30秒超时问题解决方案

Java端调整配置

你当前使用的是Undertow容器(日志中出现XNIO线程标识),Undertow默认的SSL会话超时、空闲连接超时均为30秒,这是触发问题的核心原因,按以下步骤调整即可:

  • 新增Spring Boot自定义Undertow配置Bean,调整空闲连接和SSL会话相关参数:
import org.springframework.boot.web.embedded.undertow.UndertowWebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.undertow.UndertowOptions;

@Configuration
public class UndertowConfig {
    @Bean
    public UndertowWebServerFactoryCustomizer undertowCustomizer() {
        return factory -> factory.addBuilderCustomizers(builder -> {
            // 空闲连接超时设为300秒(5分钟),单位为毫秒
            builder.setServerOption(UndertowOptions.NO_REQUEST_TIMEOUT, 300000);
            // SSL会话超时设为3600秒(1小时),单位为秒
            builder.setServerOption(UndertowOptions.SSL_SESSION_TIMEOUT, 3600);
            // SSL会话缓存大小调整为10万,适配用户量较大的场景
            builder.setServerOption(UndertowOptions.SSL_SESSION_CACHE_SIZE, 100000);
        });
    }
}
  • 在现有的启动类main方法中补充JVM TLS参数,优化会话票证生效规则:
// TLS会话票证有效期设为3600秒(1小时)
System.setProperty("jdk.tls.server.sessionTicketTimeout", "3600");
// 服务端TLS会话缓存超时设为3600秒,和Undertow配置对齐
System.setProperty("jdk.tls.server.sessionTimeout", "3600");
// 服务端TLS会话缓存大小调整为100000
System.setProperty("jdk.tls.server.sessionCacheSize", "100000");

注意:如果是集群部署,需要统一配置所有节点的TLS会话票证加密密钥,避免跨节点请求无法复用会话。

Swift端调整配置

iOS的URLSession默认自带TLS会话缓存能力,按以下规则配置即可最大化复用效率:

  • 全局复用同一个URLSession实例,不要每次请求都新建URLSession对象,TLS会话缓存和URLSession实例绑定,实例销毁后缓存会直接清空。
  • 调整URLSessionConfiguration的超时配置,和服务端空闲超时对齐:
let config = URLSessionConfiguration.default
// 请求超时设为30秒,可根据业务实际场景调整
config.timeoutIntervalForRequest = 30
// 资源整体超时设为300秒,和服务端空闲连接超时对齐
config.timeoutIntervalForResource = 300
// iOS13+可开启多路径支持,进一步优化弱网下的连接效率
if #available(iOS 13.0, *) {
    config.multipathServiceType = .handover
}
// 全局复用该session实例即可
let sharedSession = URLSession(configuration: config)
  • 没有特殊安全要求的前提下,不要主动调用URLCache.shared.removeAllCachedResponses()之类的缓存清理方法,也不要修改httpCookieStorage的默认配置,两类操作都会导致TLS会话缓存失效。

内容的提问来源于stack exchange,提问作者Sorin Penteleiciuc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 08:00:05