HTTP 重定向
什么是 HTTP 重定向?
HTTP 重定向(HTTP Redirect) 是服务器向客户端(通常是浏览器)发出的指令,告诉客户端某个请求的资源已被移到新的位置。重定向通常通过发送一个特殊的 HTTP 状态码(例如 3xx 系列状态码)和一个 Location 头,指示客户端去访问新的 URL。
重定向的场景
永久重定向(Permanent Redirect)
永久重定向 是 HTTP 状态码 301 和 308 所代表的重定向类型,用于告知客户端和搜索引擎,某个资源已永久迁移到新位置。这些重定向的关键在于 "永久",即原始 URL 将不再有效,应该替换为新 URL。永久重定向不仅影响浏览器,还会被搜索引擎、RSS 订阅器和其他网络爬虫采纳,用来更新资源的地址。
状态码 | 描述 | 请求方法变化 | 应用场景 |
---|---|---|---|
301 | 永久移动(Moved Permanently) | GET 方法不变,其他方法可能会改变为 GET | 网站迁移、URL 改变、搜索引擎优化、重定向旧资源到新资源 |
308 | 永久重定向(Permanent Redirect) | 请求方法保持不变(包括非 GET 请求,如 POST、PUT 等) | 网站迁移或 URL 重构时,要求保持原请求方法不变的情况 |
临时重定向(Temporary Redirect)
临时重定向 用于告诉客户端某个资源当前无法从原位置访问,但可以通过临时的另一个 URL 来访问。它是指 短期的变动,意味着 客户端不应更新其缓存或链接,也不应将新的 URL 视为资源的永久位置。
状态码 | 描述 | 请求方法变化 | 请求体变化 | 应用场景 |
---|---|---|---|---|
302 | 临时重定向(Found) | GET 方法不变,其他方法可能变为 GET | 请求体可能被丢弃 | 页面暂时不可用,服务器引导客户端到其他地方 |
303 | 查看其他(See Other) | 请求方法变为 GET | 请求体丢失 | 用于 POST 或 PUT 请求后,避免重复提交数据 |
307 | 临时重定向(Temporary Redirect) | 请求方法不变 | 请求体不变 | 非 GET 请求时,确保方法和请求体不被改变 |
特殊重定向(Special Redirections)
除了常见的永久和临时重定向,HTTP 还定义了两种特殊类型的重定向:304 (Not Modified) 和 300 (Multiple Choices)。这两种状态码在特定的场景下用于优化用户体验或提供选择性重定向。
状态码 | 描述 | 响应体 | 用途 |
---|---|---|---|
304 | 未修改(Not Modified) | 无响应体 | 用于缓存验证,告诉客户端缓存的资源未被修改,可以继续使用本地缓存 |
300 | 多种选择(Multiple Choices) | 含有多个可选的 URL | 服务器提供多个资源供客户端选择,用户需手动选择访问哪个资源 |
无限重定向
重定向循环是指一个页面不断地被重定向到另一个页面,而新的页面又重定向回原来的页面,形成一个无法结束的循环,导致无法访问任何页面。这种问题通常是服务器配置错误引起的,如果服务器能检测到这个问题,它可能会返回 500 内部服务器错误
参考
Redirections in HTTP - HTTP | MDN