HTTP重定向的实际工作原理(301 vs 302 vs 307)

解释常见HTTP重定向状态码的功能及使用场景:│ 301(永久移动)│ 302(已找到/临时移动)│ 307(临时重定向)

Beginner

HTTP重定向是一种将用户和搜索引擎引导至不同于其原始请求URL的方法。服务器通过向客户端(浏览器)发送特定的HTTP状态码实现此功能,该状态码会指示客户端向新URL发起新的请求。

以下是不同类型重定向的工作原理:

1. 301 永久重定向

  • 用途: 表示请求资源已永久迁移至新URL。
  • 行为: 浏览器将自动跳转至新URL,且通常会缓存此重定向。 这意味着后续对原始网址的请求将直接跳转至新网址,不会先访问旧网址。搜索引擎也会更新索引指向新网址。
  • 方法变更: 原始请求使用的HTTP方法(如GET、POST)在重定向请求中可能从POST变为GET,但现代浏览器通常会保留301重定向中的原始方法。
  • 适用场景: 页面永久地址变更、域名迁移或强制启用HTTPS时。

2. 302 找到(临时移动)

  • 用途: 表示请求资源暂时位于其他URL。 服务器期望客户端未来请求仍使用原始URL。
  • 行为: 浏览器将重定向至新URL,但不会缓存该重定向。未来对原始URL的请求仍将访问原服务器,该服务器将再次发出302重定向。搜索引擎通常不会更新302重定向的索引。
  • 方法变更: 传统上,浏览器会将重定向请求的HTTP方法从POST改为GET,即使原始请求是POST。此行为至今仍很常见。
  • 适用场景: A/B测试、临时着陆页,或资源在常规位置暂时不可用时。

3. 307 临时重定向

  • 用途: 与302类似,表示请求资源暂时位于其他URL。关键区别在于HTTP方法的处理方式。
  • 行为表现: 浏览器将重定向至新URL,且不会缓存该重定向操作。
  • 方法保留: 关键在于307重定向明确保证原始请求使用的HTTP方法(如GET、POST、PUT)将在重定向请求中完整保留。 若原始请求为POST,重定向请求也将保持POST状态。
  • 适用场景: 需临时重定向且必须保留原始HTTP方法时(如表单提交场景)。当方法保留至关重要时,相较于302状态码,此方法在语义上更为准确。