3xx(重定向)类状态码表明用户代理需要执行进一步不懂以完成请求。如果Location头字段(7.1.2节)被提供,用户代理可能自动的重定向它的请求到Location字段值指向的URI,即使特定的状态码无法理解。自动重定向需要按照第4.2.1节中定义的方法进行,因为用户可能不希望重定向不安全的请求。
有几种类型的重定向:
- 重定向表明资源可能在由Location字段提供的不同的URI上可用,如301(永久移动),302(发现),307(临时重定向)状态码。
- 提供了匹配资源的选择的重定向,每个资源都可以表示原始请求目标,如300(多选)状态码。
- 重定向打一个不同的资源,通过Location字段标识,这可以代表对请求的剪接响应,如303(查看其他)状态码。
- 重定向到一个先前的缓存结果,如304(未修改)状态码。
注意:在HTTP/1.0中,301(永久移动)和302(发现)状态码是为第一类重定向(RFC1945,9.3节)定义的。早期的用户代理在对重定向目标应用的方法是否与原始请求相同或将被重写为GET时发生分裂。虽然HTTP最初用301和302定义了前一种语法(以匹配它在CERN的原始实现),并定义了303(查看其他)来匹配后一种语法,大量时间也逐渐用301和302覆盖了后一种语法。HTTP/1.1的第一个调整添加了307(临时重定向)来表明前一种语法而不被不同的实践影响。经过十多年,大多数用户代理依然进行对301和302进行方法重写;因此,当请求是POST的时候,本规范使得这种行为有效。
客户端应该检测并干预周期性重定向(即,“无穷”重定向循环)。
注意:本规范的早期版本推荐最多5次重定向(RFC2068,10.3节)。内容开发者需要小心一些客户端可能实现这个固定限制。