restTemplate Invalid ‘expires‘ attribute: Sat, 18 Apr 2054 02:50:25 GMT、

服务器后台warning:

分析:

Sat, 18 Apr 2054 02:50:25 GMT、日期解析失败,使用标准的cookie解析方式

解决:

RequestConfig.custom().setConnectionRequestTimeout(connectRequestTimeout) .setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout) .setCookieSpec(CookieSpecs.STANDARD).build();

java 复制代码
	@Bean
	public RestTemplate restTemplate(@Autowired CloseableHttpClient closeableHttpClient) {
		return new RestTemplate(new HttpComponentsClientHttpRequestFactory(closeableHttpClient));
	}
	
@Bean
	public CloseableHttpClient closeableHttpClient() {
		return builder(connectTimeout, connectRequestTimeout, readTimeout);
	}

	private CloseableHttpClient builder(int connectTimeout, int connectRequestTimeout, int socketTimeout) {
		RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(connectRequestTimeout)
				.setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout)
				.setCookieSpec(CookieSpecs.STANDARD).build();

		return HttpClients.custom().setConnectionManager(get()).setDefaultRequestConfig(requestConfig)
				.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy() {
					@Override
					public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
						long time = super.getKeepAliveDuration(response, context);
						if (time >= 0) {
							return time;
						}
						return keepAliveTime;
					}
				}).build();
	}

	private PoolingHttpClientConnectionManager get() {
		if (gcm != null) {
			return gcm;
		}
		synchronized (RestConfig.class) {
			Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
					.register("http", PlainConnectionSocketFactory.getSocketFactory())
					.register("https", SSLConnectionSocketFactory.getSocketFactory()).build();
			PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager(registry);
			manager.setMaxTotal(maxTotal);
			manager.setDefaultMaxPerRoute(maxPerRoute);
			idleThread = new IdleConnectionMonitorThread(manager);
			idleThread.start();
			Runtime.getRuntime().addShutdownHook(new Thread() {
				@Override
				public void run() {
					idleThread.shutdown();
				}
			});

			gcm = manager;
		}
		return gcm;
	}

	// 监控有异常的链接
	private class IdleConnectionMonitorThread extends Thread {
		private final HttpClientConnectionManager connMgr;
		private volatile boolean exitFlag = false;

		public IdleConnectionMonitorThread(HttpClientConnectionManager connMgr) {
			this.connMgr = connMgr;
			setDaemon(true);
		}

		@Override
		public void run() {
			while (!exitFlag) {
				synchronized (this) {
					try {
						wait(2000);
					} catch (InterruptedException e) {
						Thread.currentThread().interrupt();
					}
				}
				// 关闭失效的连接
				connMgr.closeExpiredConnections();
				// 可选的, 关闭指定时间内不活动的连接
				connMgr.closeIdleConnections(30, TimeUnit.SECONDS);
			}
		}

		public void shutdown() {
			exitFlag = true;
		}
	}
复制代码

参考:

Spring Boot 无效的cookie标头:无效的"expires"属性 _大数据知识库

Invalid cookie header: "Set-Cookie: xxx", HttpOnly". Invalid 'expires' attribute报错说明-CSDN博客

HttpClient4 警告: Invalid cookie header 的问题解决_org.apache.http.client.protocol.responseprocesscoo-CSDN博客

相关推荐
马优晨21 小时前
Spring Boot + MyBatis + Redis 整合实战 —— 项目源码深度解析
spring boot·redis·mybatis·mybatis + redis·redis实战·spring实战·mybatis实战
IKUN家族1 天前
Spring MVC(一)
java·spring·mvc
老马识途2.01 天前
关于跨域问题的总结
java·前端
都叫我大帅哥1 天前
Java日期时间三十年战争:从Date考古到LocalDateTime革命,以及数据库与前端的那点事儿
java
Muscleheng1 天前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
2501_936415691 天前
可变参数&综合练习&斗地主游戏
java·windows·游戏
极客先躯1 天前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
xqqxqxxq1 天前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
wang09071 天前
自己动手写一个spring之aop_1
java·后端·spring
国科安芯1 天前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v