java重定向method由post转换为get解决

问题:

后端sendRedirect方法使用redirect方式进行url重定向,http返回码默认是302,部分前端会将该返回码会强制将原本post请求转换成get请求,导致post参数丢失。

原因:

302 Found:当服务器返回状态码 302 时,表示请求的资源暂时被重定向到其他位置。对于 GET 请求,客户端会自动进行重定向操作,而对于POST 请求,则可能会将请求方法改为 GET 并重定向
307 Temporary Redirect:与 302 不同,当服务器返回状态码 307 时,表示请求的资源也被临时重定向到了其他位置。不同的是,对于所有类型的请求(包括 GET、POST 等),客户端都会保持原始请求的方法和消息体不变,并重发请求到新的 URI。
因此,307 Temporary Redirect 更适合于需要保持原始请求特性的场景,尤其是对于 POST 请求的处理。

解决:

使用HttpServletResponse的setStatus方法设置为307不起作用,sendRedirect 方法会将setStatus中的状态码覆盖,总会返回302,所以不能进使用sendRedirect需要手动设置HTTP头Location字段。

代码:

String redirectUrl = redirectDomain+"/doProcess";
//response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT); //无效,会被sendRedirect的302覆盖
//response.sendRedirect(redirectUrl);//HttpServletResponse方式
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);//默认状态码302,苹果手机App会将post会变成get,所以改成307
response.setHeader("Location", redirectUrl);

参考: https://www.cnblogs.com/crispyChicken/p/17876670.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值