• 概念
  • 由服务器来发起的,浏览器使用者无法控制,相对地就可以称为“被动跳转”,在 HTTP 协议里叫做“重定向”(Redirection)。
  • “Location”字段属于响应字段,必须出现在响应报文里。但只有配合 301/302 状态码才有意义,它标记了服务器要求重定向的 URI。
  • 浏览器收到 301/302 报文,会检查响应头里有没有“Location”。如果有,就从字段值里提取出 URI,发出新的 HTTP 请求,相当于自动替我们点击了这个链接。
  • 响应头字段 Location 指示了要跳转的 URI,可以用绝对或相对的形式。
  • java代码中的一种实现方式:
  • WK iOS 重定向cookie丢失 重定向 location_状态码

  • 永久重定向&临时重定向
  • 永久重定向:是指原来访问的资源已经永久删除啦,客户端应该根据新的URI访问重定向。
  • 临时重定向:是指访问的资源可能暂时先用location的URI访问,但旧资源还在的,下次你再来访问的时候可能就不用重定向了。
  • 重定向的状态码

Permanent(永久)

Temporary(临时)

Allows changing the request method from POST to GET.

301

302

Does not allow changing the request method from POST to GET.

308

307

  • 状态码区别
  • 301,302是http1.0的内容,303、307、308是http1.1的内容。
  • 301和302本来在规范中是不允许重定向时改变请求方法的(将POST改为GET),但是许多浏览器却允许重定向时改变请求方法(这是一种不规范的实现)。
  • 303的出现正是为了给上面的301,302这种行为作出个规范(将错就错吧),也就是允许重定向时改变请求方法。此外303响应禁止被缓存。
  • 307和308的出现也是给上面的行为做个规范,不过是不允许重定向时改变请求方法。
  • 不同状态码的使用场景
  • 301
  1. 域名到期不想续费(或者发现了更适合网站的域名),想换个域名。
  2. 在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。
  3. 空间服务器不稳定,换空间的时候。
  • 302
  1. 未登录前先使用302重定向到登录页面,登录成功后再跳回到原来请求的页面。
  2. 有时候需要自动刷新页面,比如5秒后回到订单详细页面之类。
  3. 有时系统进行升级或者切换某些功能时,需要临时更换地址。
  4. 像微博之类的使用短域名,用户浏览后需要重定向到真实的地址之类。
  5. 电脑端与移动端的转换.比如我访问网页端页面https://www.taobao.com/,302重定向到了移动端页面m.taobao.com。
  • 307
  • 与302类似,只不过请求时不允许改变请求方式。