Wildfly 11 HTTP转HTTPS重定向丢失请求方法问题求助
解决Wildfly 11中HTTP转HTTPS重定向导致POST请求405的问题
这个问题我之前配置Wildfly重写规则时也踩过坑,根源在于默认的重定向行为会篡改请求方法:当你用不带指定状态码的redirect="true"时,Undertow会返回302 Found响应,客户端收到后会自动把POST请求转换成GET请求重新发送,这就导致HTTPS端点收到的请求方法和预期不符,直接返回405错误。
要保留原始请求方法(包括POST、PUT等带请求体的方法),你需要用支持保留请求上下文的重定向状态码——307 Temporary Redirect或308 Permanent Redirect,前者适用于临时重定向场景,后者用于永久重定向场景。
修改后的配置
1. 更新重写过滤器配置
在<filters>块中,为rewrite过滤器添加status-code参数指定状态码:
<filters> <rewrite name="http-to-https" redirect="true" target="https://%v:443%U" status-code="307"/> </filters>
如果是永久重定向需求,把status-code的值改为308即可。
2. 保留原有的filter-ref配置
<filter-ref name="http-to-https" predicate="equals(%p,80)"/>
原理说明
根据Undertow 1.4.x的文档,status-code参数允许自定义重定向的HTTP状态码:
- 307会强制客户端使用原始请求方法和请求体重新发送请求到目标HTTPS地址
- 308的行为和307一致,但表示重定向是永久的,浏览器可能会缓存这个重定向规则
这样修改后,POST请求就会以原方法和请求体被重定向到HTTPS端点,不会再出现405错误。
内容的提问来源于stack exchange,提问作者Littlefield
相关产品推荐
相关产品推荐

