我最近在我的 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。