透视 HTTP 协议
罗剑锋(Chrono)
前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者
63943 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
开篇词 (1讲)
透视 HTTP 协议
15
15
1.0x
00:00/00:00
登录|注册

18 | 四通八达:HTTP的重定向和跳转

循环跳转
性能损耗
避免重复
资源不可用
308 Permanent Redirect
307 Temporary Redirect
303 See Other
302 Moved Temporarily
301 Moved Permanently
Location字段
301/302状态码
重定向的相关问题
重定向的应用场景
重定向状态码
重定向的过程
HTTP的重定向和跳转

该思维导图由 AI 生成,仅供参考

在专栏第 1 讲时我曾经说过,为了实现在互联网上构建超链接文档系统的设想,蒂姆·伯纳斯 - 李发明了万维网,使用 HTTP 协议传输“超文本”,让全世界的人都能够自由地共享信息。
“超文本”里含有“超链接”,可以从一个“超文本”跳跃到另一个“超文本”,对线性结构的传统文档是一个根本性的变革。
能够使用“超链接”在网络上任意地跳转也是万维网的一个关键特性。它把分散在世界各地的文档连接在一起,形成了复杂的网状结构,用户可以在查看时随意点击链接、转换页面。再加上浏览器又提供了“前进”“后退”“书签”等辅助功能,让用户在文档间跳转时更加方便,有了更多的主动性和交互性。
那么,点击页面“链接”时的跳转是怎样的呢?具体一点,比如在 Nginx 的主页上点了一下“download”链接,会发生什么呢?
结合之前的课程,稍微思考一下你就能得到答案:浏览器首先要解析链接文字里的 URI。
http://nginx.org/en/download.html
再用这个 URI 发起一个新的 HTTP 请求,获取响应报文后就会切换显示内容,渲染出新 URI 指向的页面。
这样的跳转动作是由浏览器的使用者主动发起的,可以称为“主动跳转”,但还有一类跳转是由服务器来发起的,浏览器使用者无法控制,相对地就可以称为“被动跳转”,这在 HTTP 协议里有个专门的名词,叫做“重定向”(Redirection)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

HTTP的重定向和跳转在万维网构建超链接文档系统中扮演着关键角色。重定向是服务器发起的跳转,通过301和302状态码实现,分别表示永久重定向和临时重定向。本文介绍了重定向的过程、状态码及应用场景,包括资源不可用时的跳转和避免重复访问的处理。理解重定向的工作原理和状态码的含义,可以在服务器端控制浏览器的行为,提供更好的用户体验。文章还提到了重定向可能带来的性能损耗和循环跳转问题,以及301和302状态码的异同点。总的来说,重定向是一个强大的工具,但需要谨慎使用,避免滥用和出现循环跳转。文章内容简洁明了,对HTTP重定向和跳转进行了全面的介绍,适合读者快速了解相关概念和技术特点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《透视 HTTP 协议》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(59)

  • 最新
  • 精选
  • 之前面试官好像比较喜欢问外部重定向和内部重定向的区别? 外部重定向,服务器会把重定向的地址给浏览器,然后浏览器再次的发起请求,地址栏的地址变化了。 内部重定向,服务器会直接把重定向的资源返给浏览器,不需要再次在浏览器发起请求,地址栏的地址不变。 重定向我的经验,主要用在未登录或者权限不足的场景,跳转到对应的登录或提升页面之中。 当然,通用的SSO也是这样做的。

    作者回复: 1.内部重定向对于用户来说成本低,因为只在网站服务器内部跳转,所谓的router。 2.对,这是最常见的应用场景之一。

    2020-03-29
    8
    47
  • Geek_5b0e47
    笔记: 主动跳转:跳转动作是由浏览器的使用者主动发起的; 被动跳转:跳转动作是由服务器发起的,浏览器使用者无法控制。 1、重定向状态码 301:俗称“永久重定向”,原URI已经“永久”性地不存在了,今后的所有请求都必须改用新的URI. 302: 俗称“临时重定向”,原URI处于“临时维护”状态,新的URI是起“顶包”作用的临时工。 303 See Other: 类似302,但要求重定向后的请求改为GET方法,访问一个结果页面,避免POST/PUT重复操作; 307 Temporary Redirect: 类似302,但重定向后请求里的方法和实体不允许变动,含义比302更明确; 308 Permanent Redirect: 类似307,不允许重定向后的请求变动,但它是301“永久重定向”的含义 2、重定向的应用场景 一个最常见的原因就是“资源不可用”,需要用另一个新的URI来代替。 不可用的原因:如域名变更、服务器变更、网站改版、系统维护。 另一个原因就是“避免重复”,让多个网址都跳转到一个URI,增加访问入口的同时还不会增加额外的工作量。如:有的网站会申请多个名称类似的域名,然后把它们重定向到主站上。 3、重定向的相关问题 第一个问题是“性能损耗”。重定向的机制决定了一个跳转会有两次请求-应答,比正常的访问多了一次。 第二个问题是“循环跳转”。如果重定向的策略设置欠考虑,可能会出现“A=>B=>C=>A”的无限循环。

    作者回复: great。

    2020-03-27
    17
  • 蚂蚁内推+v
    老师,使用301会比302有较大的性能提升么

    作者回复: 对于单次请求来说是没什么差别的,但浏览器会对301做优化,后续的请求就不会再有跳转动作,所以会快一些。

    2019-08-19
    13
  • 老师,这个301,302, 303重定向要求前后协议一致吗?http不能调转https?

    作者回复: 没有要求,当然可以跳转到https。

    2019-07-18
    2
    12
  • 夏目
    1、301用于废弃原地址跳转新地址,302用于暂时无法访问原地址跳转新地址,两者都需要浏览器重新发起一次请求 2、最开始接触重定向的时候就是用于未登录跳转登录页了

    作者回复: 说的很好。

    2019-12-03
    9
  • snake
    站外重定向就要开两个连接,如果网络连接质量差,那成本可就高多了,会严重影响用户的体验。 ------------》 老师这个我不理解,站外重定向,比如重定向到其他网站,那客户端的连接跟自己的服务端应该就没有什么关系了吧?为什么还有两个连接呢?不是客户端应该跟其他网站的服务器连接吗?

    作者回复: 是这样的:首先与本站是一个连接,然后到外站,就必须再开一个连接,这样就是两个连接了,两次tcp握手,对于客户端成本就很高了,当然服务器是无所谓的。

    2020-06-22
    8
  • lll
    “另一个原因就是“避免重复”,让多个网址都跳转到一个 URI,增加访问入口的同时还不会增加额外的工作量。”这句话怎么理解呢?

    作者回复: 比如说Google就注册了很多的域名,比如goo.gl、g.cn等等,但都指向的是同一个服务,这样对于用户来说就很方便,随便记一个就能访问。

    2020-09-19
    2
    7
  • 毛毛
    重定向和转发的区别和用途,以后章节会讲吗?

    作者回复: 你说的“转发”指什么?是代理吗?如果是的话很快就会讲到。

    2019-07-08
    4
    6
  • 天方夜
    从短域名跳长域名(z.cn - www.amazon.cn),从 http 跳 https,分别应当用哪种重定向,有没有最佳实践呢?

    作者回复: 我觉得正文里的可以参考,就是看这个跳转是否是“临时”的,如果是永久条件就用301,而跟长短域名、http到https没有特别的关系。

    2021-02-20
    4
  •  尿布
    重定向报文里还可以用Refresh字段,实现延时重定向,例如”Refresh: 5; url=xxx“告诉浏览器5秒钟后再跳转 与跳转有关的还有一个”Referer“和”Refereer-Policy“(注意前者是个拼写错误,但已经”将错就错“),表示浏览器跳转的来源(即引用地址),可用于统计分析和防盗链

    作者回复: 把重要的信息当做笔记保存起来,这个习惯很好。

    2020-09-09
    4
收起评论
显示
设置
留言
59
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部