我现在遇到了另一个与重定向相关的问题。这次就涉及到set-cookie
头部了。
我们有一个测试POST
向 发出请求/login
。它收到一个重定向响应,其中包含以下两个标头:
location: http://localhost:53640/
set-cookie: SESSION=ZGYzMDhhM2ItOTk4Yy00OThkLTg2ZDktM2U1MmFiNDA2YmI3; Path=/; HttpOnly; SameSite=Lax
与仅遵循请求重定向的简单客户端不同GET
,此重定向会自动遵循并向GET
发出请求http://localhost:53640/
。由于没有配置 cookie 管理器,因此不会cookie
发送标头。HttpClient
对此请求的响应GET
包含以下标头:
location: http://localhost:53640/login
set-cookie: SESSION=NTI3YTUwMDgtMjIyNS00OTI1LWFkOWUtYTM3ZjVjYzkxNGFm; Path=/; HttpOnly; SameSite=Lax
也遵循此重定向,因此GET
现在向 发出请求http://localhost:53640/login
。再次,没有cookie
发送标头。对此的响应是带有 HTML 登录页面的 200,set-cookie
响应中没有标头。以下重定向会阻止测试获取set-cookie
响应原始POST
请求而发送的标头,从而导致无法使用当前HttpClient
配置进行登录。
在我看来,我们有两个相互竞争的要求,无法同时满足。为了匹配简单请求工厂的行为,我们需要遵循重定向,但仅限于GET
请求,而新的HttpClient
. 这让我们在 Boot 中陷入了尴尬的境地。
JdkClientHttpRequestFactory
如果我们引入对 的支持,SimpleClientHttpRequestFactory
我认为这对于当前使用SimpleClientHttpRequestFactory
. 如果我们愿意SimpleClientHttpRequestFactory
,JdkClientHttpRequestFactory
自动检测将永远不会选择后者,因为SimpleClientHttpRequestFactory
所需的类将始终存在。感觉这里没有一个好的答案。使用 cookie 管理器进行配置HttpClient
可能会有所帮助,但我认为这并不能完全解决问题。