301 302 303 307

HTTP 1.0

301 moved permanently

规范:301表示永久重定向,当资源被永久迁移到一个新的URL时,任何未来对该资源的访问都会重定向到这个新的URL。具有编辑能力的用户将自动重新链接到新的地址上。新的链接地址需在服务器的响应首部给出,除了HEAD请求,这个响应报文的实体需要包含一个新的超链接的说明。但如果是对于POST方法的请求,若返回301状态码,用户则需要确认后才能重定向。

实现:但实际上关于post请求重定向用户确认的问题,浏览器上并没有实现,而且部分浏览器还会还会错误的发送一个GET请求到新地址。

302 moved temporarily

HTTP1.0:302表示临时重定向,location中的地址不应该被认为是资源路径,在后续的请求中应该继续使用原地址。原请求是post,则不能自动进行重定向,原请求是get,可以自动重定向。

实现:浏览器即便请求POST也会自动重定向。

应用:302劫持——若A站通过重定向到B站的资源x,A站具有较好的域名,但B站域名不那么友好,因此对搜索引擎而言,可能会保存A站的地址对应资源x而不是B站,这样A站就利用了B站的资源提高了自己的搜索排名。

总结:301与302规范和实现上一样,不同的是301是永久重定向,302是临时重定向。

HTTP 1.1

301 moved permanently

同1.0

302 found

302不再推荐使用,为兼容而保留。且再次重申只有当请求是GET或HEAD时才能自动重定向。为了消除HTTP1.0中302的二义性,在HTTP1.0中引入了303和307来细化302的语义。

303 see other

HTTP1.1: 1.0中302的实现

307 temporary redirect

HHTP1.1:1.0中302的规范