聊聊 HTTP 重定向

871 阅读3分钟
状态码 含义 区别
301 Move Permanently:
永久重定向。旧地址的资源已经被永久地移除了(这个资源不可访问了)
1、SEO 友好:因为是 301 永久重定向,这个意思就是 a 链接已经没有存在的意义了,他所有的价值都会导向给 b。所以对于搜索引擎来说 b 链接就是 a 链接了现在。所以 a 链接的权重会直接传递给 b 链接。
2、将网站地址由 HTTP 迁移到 HTTPS 的最佳方法。
3、缓存:搜索引擎会缓存这个重定向很长一段时间,也是 301 传递权重的一个原因。
302 Found:
临时重定向。HTTP 1.0 状态码,请求的资源原本确实存在,但已经被临时改变了位置。
1、不缓存:请求的资源暂时驻留在不同的 URI 下,故而除非特别指定了缓存头部指示,该状态码不可缓存。
2、使用不规范,请求方法会改变:规范中规定 302 重定向不允许修改请求方式,也就是当一个 POST 请求返回了 302 时,按照规范仍然应该使用 POST 请求打开响应头中 Location 中的 URl。但目前的浏览器没有遵守这个规范。
303 See Other:
临时重定向。HTTP 1.1 新增,用于在收到 HTTP POST 请求之后,进行 URL 重定向的操作
1、强制转为 GET 请求。无论原请求是 GET 还是 POST,客户端收到服务端的响应后,必须使用 GET 方法重定向到新地址,请求地址为 header 头中的 Location
307 Temporary Redirect:临时重定向 1、请求方法不变:307 约定客户端重定向之后不能改变原先的请求方法,要求浏览器继续向 Location 的地址 POST 内容。

301、302 的区别

  1. 301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时,将旧的网址交换为重定向之后的网址(即搜索引擎会缓存这个重定向)。
  2. 302表示旧地址A的资源还在(仍然可以访问),意味着当前这个链接随时有可能取消重定向或者重定向到其他地方去,搜索引擎会抓取新的内容而保存旧的网址(即搜索引擎不会缓存这个重定向)。

301 重定向的缺点

301 重定向有一个很重要的特性就是缓存,也就是为什么 301 叫永久重定向的原因。 举个例子,假设您本来是将 me.com 301 到 you.com。一段时间之后又决定要将 me.com 301 重定向到 us.com。那么后来的这个操作可能要花很长时间才能生效,因为搜索引擎会缓存原始重定向相当长的一段时间。 所以,当你要创建重定向的时候,要从长远的角度考虑,未来是否会修改这个重定向。如果不会修改,那么直接使用 301 就行。如果有可能需要修改的话,那么使用 301 重定向时,请禁止对其进行缓存。 下面是两种禁用缓存的方法:

  1. 在服务端响应头中添加 “Cache-Control:no-cache”(推荐这种方法)
  2. 在重定向页面的 Header 中使用 “ Pragma:no-cache”