307 重定向 (Temporary Redirect) 是 HTTP/1.1 协议中引入的临时重定向状态码。与 302 的关键区别在于,307 严格要求浏览器在重定向时保持原始请求方法不变。如果原始请求是 POST,重定向后仍然使用 POST 方法发送请求。
307 的引入是为了解决 302 重定向的历史歧义。在早期的浏览器实现中,302 重定向会将 POST 请求改为 GET 请求,这与 HTTP 规范的原始意图不符。307 明确规定了"不得改变请求方法"的行为,消除了这种歧义。
在 URL 缩短服务中,307 重定向的使用场景相对有限,因为通过浏览器点击短链接产生的是 GET 请求。但在 API 网关或表单提交的重定向场景中,307 的方法保持特性才会体现出来。
307 与 HSTS (HTTP Strict Transport Security) 的关系也值得关注。对于已经记录了 HSTS 策略的网站,浏览器会在本地把 HTTP 请求改写为 HTTPS;一些浏览器的开发者工具将这一内部跳转显示为 307 Internal Redirect,它并非服务器返回的响应。