修复重定向没有按照RFC7231规范跳转的问题,修改为除了307外重定向使用GET方式

This commit is contained in:
Looly 2024-09-06 17:13:49 +08:00
parent cefc0fd559
commit b7ad1e82d1
3 changed files with 7 additions and 21 deletions

View File

@ -10,11 +10,11 @@
* 【core 】 用ArrayList重新实现权重随机类WeightListRandompr#3720@Github
* 【crypto 】 SM2解密时兼容GmSSL非压缩省略的04头的密文issue#IAP1QJ@Gitee
* 【core 】 兼容NumberUtil.add方法传入整型自动类型转换为浮点类型的精度丢失问题pr#3721@Github
* 【http 】 HttpConfig增加配置setUseGetIfRedirectissue#3722@Github
### 🐞Bug修复
* 【json 】 修复JSONConfig.setDateFormat设置后toBean无效问题issue#3713@Github
* 【core 】 修复RegexPool.CHINESE_NAME范围太大的问题issue#IAOGDR@Gitee
* 【http 】 修复重定向没有按照RFC7231规范跳转的问题修改为除了307外重定向使用GET方式issue#3722@Github
-------------------------------------------------------------------------------------------------------------
**# 5.8.32(2024-08-30)

View File

@ -100,11 +100,6 @@ public class HttpConfig {
* @since 5.8.33
*/
boolean useDefaultContentTypeIfNull = true;
/**
* 当重定向时是否使用Get方式发送请求<br>
* issue#3722 部分请求要求重定向时必须使用Get方式发送请求
*/
boolean useGetIfRedirect;
/**
* 设置超时单位毫秒<br>
@ -337,16 +332,4 @@ public class HttpConfig {
this.useDefaultContentTypeIfNull = useDefaultContentTypeIfNull;
return this;
}
/**
* 重定向时是否使用GET方式
*
* @param useGetIfRedirect 重定向时是否使用GET方式
* @return this
* @since 5.8.33
*/
public HttpConfig setUseGetIfRedirect(boolean useGetIfRedirect) {
this.useGetIfRedirect = useGetIfRedirect;
return this;
}
}

View File

@ -1313,9 +1313,12 @@ public class HttpRequest extends HttpBase<HttpRequest> {
redirectUrl = UrlBuilder.ofHttpWithoutEncode(location);
}
setUrl(redirectUrl);
if(config.useGetIfRedirect){
// since 5.8.33, issue#3722
setMethod(Method.GET);
// https://www.rfc-editor.org/rfc/rfc7231#section-6.4.7
// https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Redirections
// 307方法和消息主体都不发生变化
if (HttpStatus.HTTP_TEMP_REDIRECT != responseCode) {
// 重定向默认使用GET
method(Method.GET);
}
if (redirectCount < config.maxRedirectCount) {
redirectCount++;