我认为这就是 307 的用途。 RFC2616确实说:
如果收到 307 状态代码以响应 GET 或 HEAD 以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变发出请求的条件。
但它对 302 也说了同样的话,我们知道那里会发生什么。
不幸的是,您遇到的问题比浏览器没有按照 RFC 所说的方式处理响应代码更大,这与 HTTP 的工作方式有关。简化后,过程如下所示:
- 浏览器发送请求
- 浏览器表明它已经发送了整个请求
- 服务器发送响应
大概您的用户在他们的帖子中发送了一些敏感信息,这就是您希望他们使用加密的原因。但是,如果您向用户未加密的 POST(第 1 步)发送重定向响应(第 3 步),则用户已将所有敏感信息未加密发送出去。
可能是您不考虑用户发送的敏感信息,而只考虑您发送的响应敏感。然而,事实证明这是没有意义的。敏感信息应该只对某些个人可用,并且用于验证用户身份的信息必然是请求的一部分,这意味着您的响应现在可供任何人使用。因此,如果响应是敏感的,那么请求也是敏感的。
似乎您将要更改大量代码以确保所有安全帖子都使用 HTTPS(您可能一开始就应该这样编写它们)。您可能还想重新考虑仅在 HTTPS 上托管您的部分网站的决定。您确定您的基础架构无法处理使用所有 HTTPS 连接吗?我怀疑它可以。如果没有,可能是升级的时候了。