blank的编程之路


  • 首页

  • 归档

  • 搜索
consul atomikos mybatisplus druid nexus nas named bind mysqldump acme.sh Dockerfile rsync keepalived swarm kibana ubuntu linux scp bugfix https ssl certbot curl gogs adminer harbor yum portainer python kubernetes idea java springboot maven docker-compose redis nginx mysql brew git chocolatey jenkins elasticsearch docker haproxy rabbitmq centos

POST 请求 被 nginx 301 后 变 GET

发表于 2019-11-15 | 分类于 开发 | 0 | 阅读次数 1493

今天发现一个问题
由于 POST 请求 http://域名 nginx 配置了 301 https 后变成 GET 请求
导致 报错 405

WARN  15:00:20.867 [http-nio-8782-exec-7] o.s.web.servlet.PageNotFound - Request method 'GET' not supported

在全站支持HTTPS以后,用户可能还会使用http访问,所以很多建议使用301 Moved Permanently+HSTS( Strict Transport Security Policy)的方式要求用户跳转到HTTPS后再访问。

然而,对于有POST请求的域名是不适合用301 Moved Permanently的,关于post请求重定向用户确认的问题,实际上浏览器都没有实现;而且post请求的重定向应该发起post请求,这里浏览器也并不一定遵守,所以说HTTP规范的实现并未严格按照HTTP规范的语义。如下图所示。

所以这种情况,一个POST请求经过301后可能就变为GET请求。而很多服务端是对METHOD有严格限制的,万一限制只接受POST请求,对GET请求就会响应405错误,悲剧就产生了。

网上有说改成 307/308 的我试过不行

POST 请求应该直接 向 https://域名 发送请求即可解决此问题

  • 本文作者: blank
  • 本文链接: https://blankhang.com/2019/11/15/201911151606
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# consul # atomikos # mybatisplus # druid # nexus # nas # named # bind # mysqldump # acme.sh # Dockerfile # rsync # keepalived # swarm # kibana # ubuntu # linux # scp # bugfix # https # ssl # certbot # curl # gogs # adminer # harbor # yum # portainer # python # kubernetes # idea # java # springboot # maven # docker-compose # redis # nginx # mysql # brew # git # chocolatey # jenkins # elasticsearch # docker # haproxy # rabbitmq # centos
Docker docker-compose mysql 主从同步
docker 自制基于 centos7 的 中文支持带 openjdk 运行环境的底包 Dockerfile
© 2022 blank
Everything is energy and everything has a frequency