Apache HttpClient 的重定向行为

发布网友 发布时间:2024-10-23 20:43

我来回答

1个回答

热心网友 时间:2024-11-07 18:41

在HTTP协议中,Server通过HTTP状态码和Location响应头通知Client资源地址变更,具体如下:

请求过程中,即使有响应,Client可以选择展示或转向新的资源。重定向是针对URL资源而非域名的,通常重定向后的请求会变为GET,但也可通过状态码控制原始请求方式。

在HttpClient 4.5.6版本中,创建默认HttpClient的过程会涉及重定向策略,其默认行为是启用重定向。若需禁用,可有实例级别和请求级别两种方法。重定向默认遵循301和302状态码的规则,前者代表永久性转移,后者为临时性重定向。

测试显示,301状态码会缓存链接,第二次请求将直接命中缓存;而302状态码每次请求都会重定向。HttpClient对于301、308状态的处理并不区分永久和临时,每次访问都会产生两次请求,这与HTTP状态码规范的初衷有所不同。

例如,将HTTP重定向至HTTPS,虽然HTTP客户端会处理301,但实际操作中,每调用一次,Nginx日志会显示两次请求,POST请求在301重定向后会变为GET。而对于308,请求方式在重定向后保持不变,除非服务器不允许。

在HttpClient 5.1.3中,对支持的重定向状态码和请求方式转换有明确规定。然而,关于是否能在非首次访问时利用缓存优化301或308的永久重定向,仍值得深入探讨。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com