成为一个合格的前端工程师 - HTTP - 2

前言

上一篇 HTTP 讲到了第3章。这次我们讲第4章。有太多要学,不是科班出生的表示压力有点大,需要赶紧学,幸运的是我现在这家公司每个人我都能在他们身上学到东西。

TCP 是啥

HTTP的上一层,传输层用的是TCP ,书中简单的说了下TCP,建议大家还是去看看 《TCP/IP 详解一卷》。那个说的详细。

HTTP 事务的时延

我们发送一个请求,其实在服务器处理的时间一般都不长,时间上的花费是在传输数据的路上。见下图:


一条请求的时间

TCP连接的握手时延

握手需要发送三个TCP数据,这些是发送HTTP数据的准备工作花费了很多时间,原本在发送3个TCP包前是不会发送HTTP请求的,但是后来发现在TCP握手的最后一个数据包可以利用发送数据,这种技术叫做捎带。请求就变成这个样子:

注意ACK已经开始发送HTTP请求了

延迟确认

书中表面:TCP传输的时候都要接收方回发一个已收到的确认信息(确认报文),来告诉发送方,信息已经收到,不需要再发送。
一个确认报文是很小的,如果单独作为一个TCP包发送显得太浪费,所以操作系统会使用延时确认技术,简单的说就是在确认收到信息的时候,不立马发送确认报文,而是等待一小段时间,等待有同地址的报文,并将其合并一起发送。类比现实生活很是形象。

TCP慢启动

简单的说就是: 开始发送TCP请求时不会立马发送多个TCP报文,而是慢慢的并行的发送数量。比如成功发送一个之后,一次发送两个,两个成功之后。。。这样是有好处的,比如可以避免多个TCP报文因为同一个原因发送失败的而引发的性能浪费。

Connection

  • 以上简单的说了下TCP,我想看HTTP权威指南也不知道他想表达啥。建议看 TCP/IP详解来了解TCP 这块吧,后期我会边玩我的MAC ,边看书边学这本书。

Connection 是HTTP的一个首部字段。
特点一:在Connection中包含的字段,不能被转出到下一个地址。比如 Connection: name .那么name 这个首部就只能到下一个地址,活不到被下一个转出。

请求方式

下面我们来聊聊web怎么玩HTTP

串行

这是最原始的时代,估计比我还老。这种方式就是发送一个HTTP请求等其全部完成之后再发送下一个请求。(stupid)
直接上图吧,不哔哔:

连接-* 这里是建立TCP连接

并行

谁动能行到能并行,计算机本来就用的特性。
上例🌰的情况,我们分析,可以发现,1. 一次只发一个请求,浪费带宽。2. 事务之间的联系不一定要有先后关系,可以同时请求相互不影响。

模型图:( 书中给的例子是一个HTML 和 3个图片)

典型的页面加载过程

并行的问题:

  1. 带宽可能有限,带宽让我们不可能高效的并行多个请求。
  2. 性能,切换进程是需要花费性能的。
  3. 服务器拒绝,你的机子牛逼了,服务器不干了。大家都一次发这么多请求,服务器撑不住的。你慢点。😈

持久连接

并行连接其实并没有本质的提高连接的速度。它只是利用了计算机的进程功能,并没有利用网络知识。
非持续连接的问题:每次完成HTTP请求之后都要关闭TCP连接,但是我们的网站可能对同一个服务器发送多个请求,所以花费了很多时间在开启关闭TCP连接的过程中。
HTTP1.1 就通过网络知识本质的提升了性能。
持续连接:在一个HTTP请求完成之后一段时间内不关闭TCP的连接。
HTTP持久连接解决的问题:

  1. 减少建立TCP连接的时延
  2. 减少慢启动的时延

上图:

书中图画的不好,没有把第一次建立连接,和慢启动的优化显示出来

http1.0 持久连接 - Keep-alive

http1.0 如果想使用持久连接,会在请求报文中加入 Connection:keep-Alive ,如果服务器同意就会回发Connection:keep-alive .
一般 Connection:keep-alive 会和 keep-alive 首部一起使用 。如

Connection: Keep-Alive
Keep-Alive: max=5, timeout=120 ### 服务器还能支持保留多少个连接, 希望保持120秒的连接
keep-alive 的规则与限制
  1. 持久连接建立起来之后,如果在这条连接上没有在继续发 Connection:Keep-Alive 那么持久连接就会断开。
  2. 实体的主题部分必须代用正确的Content-Length,这样就能让另一端知道是报文的结束还是新报文的开始。占坑不是太懂
  3. 哑代理问题
哑代理

哑代理的问题会出现在我们的网络路线中出现一个不懂Keep-Alive机制又盲目转发的代理的情况。
首先我们主机发送一份Keep-Alive的报文,代理接受到这样一份报文,它不懂客户端要保持连接,然后又转发请求给服务器,服务器懂啊,就回了一份Connection:Keep-Alive的报文表示同意保持连接,中间代理又接受到了这样的报文,还是不懂啊,再转发给客户端。这是客户端和服务端都懂对方😝。那么客户端下一次就不会再发TCP握手数据啦,直接发请求。但是这时代理就不干了,你不发建立连接的请求,不符合规矩,直接无视。尴尬的哑代理情况就出现了。
这种尴尬的情况书中没有给出完备的解决方案。

HTTP1.1 默认持续连接

HTTP1.1 持久连接的规章制度
  1. HTTP1.1 不用发送Connection:keep-Alive 也是持久连接的
  2. 只有在发送Connection: close 时才能断开持久连接
  3. 实体主体部分的长度与相应的Content-Length一致,或者使用分块出函数编码方式。连接才能持久保持。占坑
  4. HTTP1.1 代理必须能够分别管理客户端和服务器的持久连接
  5. 一个客户端最多只能与服务器或代理保持最多两个持久连接

管道化连接

管道化在我的理解就是并行版的持久化连接请求。
就是在建立持久化连接后,在不等待上一条请求成功返回前就发送下一条请求。就是这么简单。
上图:

(b)为持久化串行请求

书中说了4点管道化的注意事项,但我感觉太过啰嗦,都是些开发者自己应该注意的问题,不在我们的知识学习范围内不说了。

关于关闭连接

书中建议我们不适用管道化来发一些非幂等的请求,因为如果中间断开了很难判断是否服务端处理了请求,还是还没收到就已经断开了连接。

记录生活

我又恋爱了,又是那个女孩。异地恋。反而让我觉得我应该更快的成熟。原本想着毕业第一年好好的善待自己,看来还是要规划下那少的可怜的薪水。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容