强制 HTTPS 导致请求从 POST 更改为 GET

强制 HTTPS 导致请求从 POST 更改为 GET

我最近在我的 apache2.conf 文件中实现了以下虚拟主机设置:

   # force HTTPS
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{REQUEST_URI} !^/path1.html
    RewriteCond %{REQUEST_URI} !^/path2.html
    #RewriteCond %{REQUEST_URI} ^/path3.html
    #RewriteCond ${REQUEST_URI} !^/index.html
    RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

我正在集成的服务之一使用 HTTP POST 与我的服务进行通信。但是,他们注意到,自从实施此配置并调用 http:// 以来,当我的服务器强制通过 https 进行调用时,请求类型会从 POST 更改为 GET,并且 POST 消息会被丢弃。我想知道是否有办法更新此代码以强制保持原始 POST/GET 方法不变。

答案1

呼叫服务已损坏,但除非您能修复呼叫者,否则您无能为力。摘自 RFC 2616:

注意:在收到 301 状态代码后自动重定向 POST 请求时,某些现有的 HTTP/1.0 用户代理会错误地将其更改为 GET 请求。

您的选择是:

  • 修复调用服务以便它正确遵循重定向。
  • 让调用服务使用 https URL。
  • 不要将此服务的 http 重定向到 https。

相关内容