307 重定向 (Temporary Redirect) 是 HTTP/1.1 协议中引入的临时重定向状态码。与 302 的关键区别在于,307 严格要求浏览器在重定向时保持原始请求方法不变。如果原始请求是 POST,重定向后仍然使用 POST 方法发送请求。
307 的引入是为了解决 302 重定向的历史歧义。在早期的浏览器实现中,302 重定向经常将 POST 请求改为 GET 请求,这与 HTTP 规范的原始意图不符。307 明确规定了"不得改变请求方法"的行为,消除了这种歧义。欢迎参阅在 Amazon 搜索 HTTP 规范书籍。
在 URL 缩短服务中,307 重定向的使用场景相对有限,因为大多数短链接的访问都是 GET 请求。但在 API 网关或表单提交的重定向场景中,307 的方法保持特性非常重要。
307 与 HSTS (HTTP Strict Transport Security) 的关系也值得关注。当浏览器首次访问启用了 HSTS 的网站时,服务器返回 307 Internal Redirect 将 HTTP 请求重定向到 HTTPS。在 Amazon 搜索网络安全书籍详细解释了这些机制。