URL 重定向

URL重定向技术是指 HTTP 客户端发送一个正常的请求后,服务端给出响应指示资源不再位于原来请求的位置。服务器以特定的响应状态码以及“location”响应头发送此信息。“Location”响应头的值包含资源的新URL,客户端将使用该URL再次请求资源(第二次)。新的URL可能位于同一个域或另外一个域上。

不同的状态码代表着不同的含义:重定向是永久的还是临时的,客户端在请求新URL时应该使用哪些HTTP方法以及是否有必要缓存重定向的信息。

以下是与URL重定向相关的不同HTTP状态码:

  • 301 (Moved permanently): 标识客户端浏览器或搜索引擎使用新的重定向”Location”更新缓存。在请求新的URL(第二次)时,客户端可以改变 HTTP 方法(如:GET到POST)。随后对旧位置的请求将直接转到新位置。

  • 302 (Found): 这是临时重定向。例如,页面开发者可以选择显示页面的不同版本/内容。除非服务器明确发送相关的Cache-Control或Expires指令,否则不会创建/更新缓存。在请求新的URL(第二次)时,客户端可以改变 HTTP 方法。所有未来的请求仍将转到旧位置并遵循相同的重定向流程,直到开发人员准备好使原始资源可用。

  • 303 (See other): 与302类似,但在第二次重定向请求中仅允许GET。

    1
    由于GET是幂等的,因此303适用于类似POST的场景以避免双重表单提交。
  • 307 (Temporary redirect): 与302类似,但307不允许在第二次重定向请求中更改HTTP方法。如果客户端在第一轮中发送PUT,则在第二轮中不能将其更改为其他方法。

    1
    由于向后兼容性,302无法使用类似规则强制执行。
  • 308 (Permanent redirect): 与使用重定向的积极缓存的301类似,但308不允许在第二次重定向请求期间更改HTTP方法。

    1
    由于向后兼容性,301无法使用类似规则强制执行。
    1
    注意:最初301和302规范也不允许改变HTTP方法,但是客户端仍然将其用于规范以解决某些特定情况,这就是引入303,307和308状态代码以避免歧义的原因。
0%