浏览器缺陷导致使用ALB配置301或302重定向后转发POST请求时返回405状态码

问题描述

负载均衡需要将域名A的POST请求转发给域名B,因此使用ALB配置监听转发规则,将转发动作中重定向的状态码配置为301或302。当客户端发出POST请求后,返回405状态码。

问题原因

部分客户端的浏览器存在缺陷,会自动修改301、302重定向的请求方法和请求主体,即将301和302重定向的POST请求自动修改成了GET请求。

解决方法

返回405状态码说明指定的请求方法不能被用于请求相应的资源,如果您的目的服务器不修改允许的请求方法,可以参考以下内容进行操作。

配置301重定向返回405

  1. 使用ALB配置监听转发规则,将转发动作中重定向的状态码配置为301。
  2. 登录Linux系统服务器,执行以下命令,查看POST请求的转发状态。
    curl -vvv -X POST [$ALB_IP] -H "host:[$Hostname]" -L
    说明
    • [$ALB_IP]:负载均衡的IP地址。
    • [$Hostname]:请求访问的具体域名。
    系统返回类似如下,确认已将POST请求完成301重定向,并且没有修改POST请求方法,可以判断是部分浏览器的缺陷问题。
  3. 使用ALB配置监听转发规则,将转发动作中重定向的状态码配置为308。
    说明:当发送永久重定向请求时,308状态码可以确保请求方法和消息主体不会发生变化。
  4. 在客户端发出POST请求,确认不返回405状态码。

配置302重定向返回405

  1. 使用ALB配置监听转发规则,将转发动作中重定向的状态码配置为302。
  2. 登录Linux系统服务器,执行以下命令,查看POST请求的转发状态。
    curl -vvv -X POST [$ALB_IP] -H "[$Hostname]" -L
    说明
    • [$ALB_IP]:负载均衡的IP地址。
    • [$Hostname]:请求访问的具体域名。
    系统返回类似如下,确认已将POST请求完成302重定向,并且没有修改POST请求方法,可以判断是部分浏览器的缺陷问题。
  3. 使用ALB配置监听转发规则,将转发动作中重定向的状态码配置为307。
    说明:当发送临时重定向请求时,307状态码可以确保请求方法和消息主体不会发生变化。
  4. 在客户端发出POST请求,确认不返回405状态码。

更多信息

关于状态码的更多信息,请参见状态码说明

适用于

  • ALB应用型负载均衡