原创

网络

什么是HTTP重定向?

发表于 2021-12-31

更新于 3年前

阅读量: 1222

温馨提示

该文章距离上次更新已经过去了 1217 天,文章内容可能已经过时。

什么是HTTP重定向

HTTP重定向指的是当浏览器请求一个URL后,服务器会返回一个重定向指令,告诉浏览器去请求另外一个URL。

HTTP重定向一般应用于站点维护停机或者站点的应用被迁移到其它的URL时,要保留原有URL的情况。HTTP协议提供了一种特殊形式的响应——HTTP 重定向(HTTP redirects)来执行此类操作。HTTP协议重定向的响应码为3xx,浏览器在接收到重定向响应时,会立即加载响应中提供的新的的URL。

HTTP的重定向分为3种:

永久重定向

永久重定向表示原来的URL已经不再使用,应该优先使用新的URL。搜索引擎会在遇到该状态码的时候触发更新操作,在其索引库中修改与该资源相关的URL。

状态码 含义 定义
301 Moved Permanently 301 状态码表明目标资源被永久的移动到了一个新的 URI,任何未来对这个资源的引用都应该使用新的 URI。
308 Permanent Redirect 308 的定义实际上和 301 是一致的,唯一的区别在于,308 状态码不允许浏览器将原本为 POST 的请求重定向到 GET 请求上。

临时重定向

有时候请求的资源无法从其标准地址访问,但是却可以从另外的地方访问。在这种情况下可以使用临时重定向。搜索引擎不会记录该新的、临时的链接。在创建、更新或者删除资源的时候,临时重定向也可以用于显示临时性的进度页面。

状态码 含义 定义
302 Found 302状态码表示目标资源临时移动到了另一个URL上。由于重定向是临时发生的,所以客户端在之后的请求中还应该使用原本的 URL。服务器会将另外一个URL放在Header的Location字段上,浏览器可以根据Location上的URL进行重定向。注意:由于历史原因,用户代理可能会在重定向后的请求中把 POST 方法改为 GET 方法。如果不想这样,应该使用 307(Temporary Redirect) 状态码。(之后我们会详细叙述历史原因)
303 See Other 303 状态码表示服务器要将浏览器重定向到另一个资源,这个资源的 URI 会被写在响应 Header 的 Location 字段。从语义上讲,重定向到的资源并不是你所请求的资源,而是对你所请求资源的一些描述。303 常用于将 POST 请求重定向到 GET 请求,比如你上传了一份个人信息,服务器发回一个 303 响应,将你导向一个“上传成功”页面。不管原请求是什么方法,重定向请求的方法都是 GET(或 HEAD,不常用)。
307 Temporary Redirect 307 的定义实际上和 302 是一致的,唯一的区别在于,307 状态码不允许浏览器将原本为 POST 的请求重定向到 GET 请求上。

特殊重定向

除了上述两种常见的重定向之外,还有两种特殊的重定向。304(Not Modified,资源未被修改)会使页面跳转到本地陈旧的缓存版本当中(该缓存已过期(?)),而 300 (Multiple Choice,多项选择) 则是一种手工重定向:以 Web 页面形式呈现在浏览器中的消息主体包含了一个可能的重定向链接的列表,用户可以从中进行选择。

参考资料:HTTP 中的 301、302、303、307、308 响应状态码

评论
0/100
0/100
0/100
0/250
暂无评论