透视HTTP协议
罗剑锋(Chrono)
奇虎360技术专家,Nginx/OpenResty开源项目贡献者
立即订阅
6077 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|To Be a HTTP Hero
免费
破冰篇 (7讲)
01 | 时势与英雄:HTTP的前世今生
02 | HTTP是什么?HTTP又不是什么?
03 | HTTP世界全览(上):与HTTP相关的各种概念
04 | HTTP世界全览(下):与HTTP相关的各种协议
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
06 | 域名里有哪些门道?
07 | 自己动手,搭建HTTP实验环境
基础篇 (7讲)
08 | 键入网址再按下回车,后面究竟发生了什么?
09 | HTTP报文是什么样子的?
10 | 应该如何理解请求方法?
11 | 你能写出正确的网址吗?
12 | 响应状态码该怎么用?
13 | HTTP有哪些特点?
14 | HTTP有哪些优点?又有哪些缺点?
进阶篇 (8讲)
15 | 海纳百川:HTTP的实体数据
16 | 把大象装进冰箱:HTTP传输大文件的方法
17 | 排队也要讲效率:HTTP的连接管理
18 | 四通八达:HTTP的重定向和跳转
19 | 让我知道你是谁:HTTP的Cookie机制
20 | 生鲜速递:HTTP的缓存控制
21 | 良心中间商:HTTP的代理服务
22 | 冷链周转:HTTP的缓存代理
安全篇 (7讲)
23 | HTTPS是什么?SSL/TLS又是什么?
24 | 固若金汤的根本(上):对称加密与非对称加密
25 | 固若金汤的根本(下):数字签名与证书
26 | 信任始于握手:TLS1.2连接过程解析
27 | 更好更快的握手:TLS1.3特性解析
28 | 连接太慢该怎么办:HTTPS的优化
29 | 我应该迁移到HTTPS吗?
飞翔篇 (4讲)
30 | 时代之风(上):HTTP/2特性概览
31 | 时代之风(下):HTTP/2内核剖析
32 | 未来之路:HTTP/3展望
33 | 我应该迁移到HTTP/2吗?
探索篇 (5讲)
34 | Nginx:高性能的Web服务器
35 | OpenResty:更灵活的Web服务器
36 | WAF:保护我们的网络服务
37 | CDN:加速我们的网络服务
38 | WebSocket:沙盒里的TCP
总结篇 (2讲)
39 | HTTP性能优化面面观(上)
40 | HTTP性能优化面面观(下)
答疑篇 (2讲)
41 | Linux/Mac实验环境搭建与URI查询参数
42 | DHE/ECDHE算法的原理
结束语 (1讲)
结束语 | 做兴趣使然的Hero
透视HTTP协议
登录|注册

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

Chrono 2019-07-08
在专栏第 1 讲时我曾经说过,为了实现在互联网上构建超链接文档系统的设想,蒂姆·伯纳斯 - 李发明了万维网,使用 HTTP 协议传输“超文本”,让全世界的人都能够自由地共享信息。
“超文本”里含有“超链接”,可以从一个“超文本”跳跃到另一个“超文本”,对线性结构的传统文档是一个根本性的变革。
能够使用“超链接”在网络上任意地跳转也是万维网的一个关键特性。它把分散在世界各地的文档连接在一起,形成了复杂的网状结构,用户可以在查看时随意点击链接、转换页面。再加上浏览器又提供了“前进”“后退”“书签”等辅助功能,让用户在文档间跳转时更加方便,有了更多的主动性和交互性。
那么,点击页面“链接”时的跳转是怎样的呢?具体一点,比如在 Nginx 的主页上点了一下“download”链接,会发生什么呢?
结合之前的课程,稍微思考一下你就能得到答案:浏览器首先要解析链接文字里的 URI。
http://nginx.org/en/download.html
再用这个 URI 发起一个新的 HTTP 请求,获取响应报文后就会切换显示内容,渲染出新 URI 指向的页面。
这样的跳转动作是由浏览器的使用者主动发起的,可以称为“主动跳转”,但还有一类跳转是由服务器来发起的,浏览器使用者无法控制,相对地就可以称为“被动跳转”,这在 HTTP 协议里有个专门的名词,叫做“重定向”(Redirection)。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《透视HTTP协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(22)

  • 毛毛
    重定向和转发的区别和用途,以后章节会讲吗?

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

    2019-07-08
    3
    6
  • 小美
    老师,使用301会比302有较大的性能提升么

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

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

    作者回复: 说的很好。

    2019-12-03
    1
  • Geek_steven_wang
    Sso就会用重定向引导用户登录。
    但如果location中没有地址,那浏览器也不知跳转到那,会出错。

    作者回复: 是的。

    2019-08-19
    1
  • 狼的诱惑
    老师好,又来请教问题了
    1.状态码301,302是有些客户端遵循http规范默认支持吗?比如浏览器,是不是浏览器解析了返回状态码,解析到301或302然后解析出地响应头/15-1地址然后又发起了一次http请求?能举例那些客户端不支持重定向吗?
    2.我觉得看文章的同时,我们是不是结合着老师提供的实验源码,来了解整个来龙去脉,这样会更容易理解?虽然老师用的lua,但还是可以勉强看懂的

    作者回复:
    1.浏览器为了方便用户访问网页,肯定是要自动跳转到新的uri的。如果你用Python等语言自己实现客户端,那就可以自己定义处理策略了。

    2.实验环境的lua源码都很简单,只有最小的服务器逻辑,如果能参照着看是最好的。

    2019-08-12
    1
  • 信信
    文中提到的所有链接都返回200,和访问http://www.chrono.com/一个效果。。。。。。

    作者回复: 建议打开开发者工具,看看uri是如何处理的。

    比如http://www.chrono.com/18-1?dst=/15-1?name=a.json,应该是跳转到15-1。

    2019-07-24
    1
  • 一步
    对于ajax请求,网上好多资料说不能处理重定向的请求比如321,302,303等,不能进行跳转,这个是为什么呢?

    作者回复: 一直做后端,对前端的技术不是太了解,很抱歉无法回答你的问题。

    重定向本质上是服务器向客户端发出的一个指示,如何做取决于客户端。

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

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

    2019-07-18
    1
  • 响雨
    我这边要做一个web升级,在升级过程中要展示升级进度,就打算301重定向到另一个服务来展示升级的进度

    作者回复: 不错。

    2019-07-09
    2
    1
  • 业余草
    每周1、3、5等着老师更新!

    作者回复: 学习态度端正,值得表扬。

    2019-07-08
    1
  • TerryGoForIt
    重定向可以应用于实现负载均衡。

    作者回复: 对,但多了一次请求的成本,比较重。

    2019-07-08
    1
  • 饭饭
    老师您好,
    重定向,我一般使用在移动PC互切的情况下会使用,因为使用到了域名会不一样。还有一种情况会在判断浏览器的时候会使用到重定向,比如IE。。。

    但是有一个问题,302是临时重定向,想问一下浏览器在每次访问的时候,都会直接访问原先URI吗?还是会有什么过期时间呢?

    作者回复: 302不改变原uri,所以每次都会找原uri,成本较高,应当尽量少用。

    2019-07-08
    1
  • Geek_Rafe
    "虽然 301/302 报文很小,但大量的跳转对服务器的影响也是不可忽视的",302的话不是客户端去重新开了一个链接链接到站外吗,对于服务器来讲,链接并没有增加,应该没有什么影响吧?还请老师解惑

    作者回复: 301/302的跳转有很多也是在本站内跳转,也就是站内重定向。

    2019-10-25
    1
  • 黄斌
    老师,在php里用header函数跳转算重定向么?

    作者回复: 我对php不熟,查了一下,header函数只是发送http响应头,如果用状态码301、302,那就是重定向跳转。

    2019-08-17
  • 彧豪
    重定向的使用场景,比如之前服务端接口修正,然后app同学那边没法一下发包,但是又需要调整请求的接口,此时就让运维同学配了一个301

    作者回复: 这个时候是否用302更好一些?

    2019-07-21
    1
  • 亚洲舞王.尼古拉斯赵四
    老师,现在h5很流行,我在手机浏览器上输入了一个网站的pc端url,他会给我转到h5的页面(如:m.xxx.com),这个也是重定向的应用吗?如果是,这是302吗?如果每次都这样岂不是会消耗大量资源?

    作者回复: 可以看一下浏览器里的地址栏,是否前后不一样,如果不同那就是重定向跳转。

    具体是301还是302只能用开发者工具看,跳转多了一次请求响应,增加了客户端的延迟,对于服务器倒是没什么影响。

    2019-07-15
  • 修行修心
    老师,我理解这两个都是修改服务端返回的状态来实现重定向,只不过是代表的方式不同,另外临时重定向将来还需要修改服务端变回原方式,而永久重定向基本可以不再改动,是这个意思吗

    作者回复: 这两个状态码都是用来通知浏览器uri情况的,告知uri表示的资源的状态。

    你理解的基本正确。

    2019-07-10
  • レイン小雨
    优秀

    作者回复: thanks。

    2019-07-10
  • 明月
    站外重定向的网站请求也是服务器代替浏览器做的吗

    作者回复: 你说的“站外重定向”是指什么?如果是301/302那就是服务器指示浏览器做的自动跳转。

    2019-07-09
  • ClassNotFoundException
    相同点都会完成重定向,不同点一个是临时重定向,一个是永久重定向,之前在单点登录项目中会大量用到重定向,还有一些ssm框架下的项目也会大量用到重定向。

    作者回复: √

    2019-07-08
收起评论
22
返回
顶部