我们通过 URL 请求一个资源的时候,如果发现这个资源已经不在这个 URL 指定的位置了,这个时候服务器要告诉客户端请求的资源现在在哪里,然后客户端再去请求那个地址,最后客户端才能拿到资源。
在开发服务器的时候,如果之前指定了某个资源在某个地方,如果后来把资源搬到了别的地方,不应该立即把原来的 URL 立即废弃掉,因为废弃掉了以后再访问这个 URL 可能就直接返回 404 说资源不存在了,正常来讲,服务器应该要告诉客户端需要去哪个新地址找到它所需的资源。这就是重定向。
URL 重定向,也可以称为 URL 转发。是一种当实际资源,如单个页面、表单或者整个 Web 应用被迁移到新的 URL 下的时候,保持(原有)链接可用的技术。HTTP 协议提供了一种特殊形式的响应—— HTTP 重定向(HTTP redirects)来执行此类操作。
浏览器在接收到重定向响应的时候,会采用该响应提供的新的 URL ,并立即进行加载;大多数情况下,除了会有一小部分性能损失之外,重定向操作对于用户来说是不可见的。
HTTP 协议的重定向响应的状态码为 3xx 。不同类型的重定向映射可以划分为三个类别:永久重定向、临时重定向、特殊重定向。
永久重定向:
这种重定向操作是永久性的。它表示原 URL 不应再被使用,而应该优先选用新的 URL。搜索引擎机器人会在遇到该状态码时触发更新操作,在其索引库中修改与该资源相关的 URL 。
[1] 该规范无意使方法发生改变,但在实际应用中用户代理会这么做。 308 状态码被创建用来消除在使用非 GET 方法时的歧义行为。
临时重定向:
有时候请求的资源无法从其标准地址访问,但是却可以从另外的地方访问。在这种情况下可以使用临时重定向。搜索引擎不会记录该新的、临时的链接。在创建、更新或者删除资源的时候,临时重定向也可以用于显示临时性的进度页面。
[2] 该规范无意使方法发生改变,但在实际应用中用户代理会这么做。 307 状态码被创建用来消除在使用非 GET 方法时的歧义行为。
特殊重定向:
除了上述两种常见的重定向之外,还有两种特殊的重定向。304(Not Modified,资源未被修改)会使页面跳转到本地陈旧的缓存版本当中,而 300(Multiple Choice,多项选择) 则是一种手工重定向:以 Web 页面形式呈现在浏览器中的消息主体包含了一个可能的重定向链接的列表,用户可以从中进行选择。