专栏首页志学Python网络基础HTTP协议进化篇

网络基础HTTP协议进化篇

就像人类已经从猿猴开始慢慢的进化为现在的人类,一开始是只会走路,慢慢就会奔跑,慢慢还会说话,慢慢还会思考,等等到现在的华夏上下5000年的文化,就这样人类一直在进化,分成了不同种类的人,有人是老板,有人是打工仔,如果深入了解,很是神奇啊

最初始版本 HTTP/0.9

HTTP/1.0

connection 字段解决问题

Content-Type 字段

text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml

这些数据类型总称为MIME type,每个值包括一级类型和二级类型,之间用斜杠分隔

Content-Encoding 字段

由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法

HTTP1.1版本

connction字段

Content-Length 字段

分块传输编码

使用Content-Length字段的前提条件是,服务器发送回应之前,必须知道回应的数据长度。

对于一些很耗时的动态操作来说,这意味着,服务器要等到所有操作完成,才能发送数据,显然这样的效率不高。更好的处理方法是,产生一块数据,就发送一块,采用"流模式"(stream)取代"缓存模式"(buffer)。

因此,1.1版规定可以不使用Content-Length字段,而使用"分块传输编码"(chunked transfer encoding)。只要请求或回应的头信息有Transfer-Encoding字段,就表明回应将由数量未定的数据块组成

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

25
This is the data in the first chunk

1C
and this is the second one

3
con

8
sequence

0

新增了请求方式PUT、PATCH、OPTIONS、DELETE等

另外,客户端请求的头信息新增了Host字段,用来指定服务器的域名。在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址

 Host: www.example.com

有了Host字段,就可以将请求发往同一台服务器上的不同网站,为虚拟主机的兴起打下了基础。(实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。)且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)

虽然1.1版允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务端是按队列顺序处理请求的,服务器只有处理完一个回应,才会进行下一个回应。假如前面的请求处理时间很长,后面就会有许多请求排队等着,这样就造成了“队头阻塞”的问题;同时HTTP是无状态的连接,因此每次请求都需要添加重复的字段,降低了带宽的利用率

多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。

为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。如果HTTP协议设计得更好一些,这些额外的工作是可以避免的

100(Continue) Status(节约带宽)

HTTP/1.1加入了一个新的状态码100(Continue)
 HTTP/1.1在1.0的基础上加入了一些cache的新特性
HTTP 1.1支持只发送header信息(不带任何body信息)
HTTP1.1还有身份认证机制
HTTP支持传送内容的一部分
 HTTP/1.1支持文件断点续传,RANGE:bytes
HTTP1.1中新增了24个错误状态响应码

HTTP/2.0

二进制协议

多工

数据流

头信息压缩

服务器推送

推送的过程

二、HTTP响应模型

服务器收到HTTP请求之后,会有多种方法响应这个请求,下面是HTTP响应的四种模型:

单进程I/O模型

多进程I/O模型

复用I/O模型

本文分享自微信公众号 - 志学Python(gh_755651538c61),作者:志学Python

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 实习一周的总结

    实习一周的感觉,就是,因为我大学学的不是计算机专业的,所以没有多大经验,包括自己自学的话,是有很多局限性的,因为不知道外面企业的项目是怎么写的,而且我自己在自学...

    公众号---志学Python
  • 破解wifi密码

    你有没有因为网费的问题,没装网络,紧靠手机过日子,有没有附近有很多WIFI,你却用不了,是不是很痛苦,是不是很难受

    公众号---志学Python
  • 爬虫 (五) 必须掌握的基础概念 (二)

    HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法

    公众号---志学Python
  • 传统ERP会突然死亡 如何转型成关键?

    在过去的一年,被问到最多的问题就是如何转型?传统ERP是否还有机会,其实想要清晰的回答这个问题不并难,翻看这两年管理软件厂商的财报你就会发现,主营业务跌跌不休,...

    人称T客
  • 消失的中国互联网元老陈天桥:为神经科学捐助10亿,不担心机器人崛起

    即使你没听说过“盛大游戏”,也一定听说过“传奇”。把风靡一时的网游“传奇”引入中国的陈天桥,是国内网游界当之无愧的元老,马化腾也表示曾将他作为学习的对象。

    大数据文摘
  • 最近要读的一些书

    其中一些感悟来自于今天玩的小游戏-消消大作战,我们可以有很多种方式可以消除其他的部分,但是在游戏里面一定要聚焦哪些才是更重要的部分,在不同的阶段有不同的明确目...

    jeanron100
  • 使用安全方式上传COS并通过事件回调通知的实践

    移动端文件上传是现在互联网应用架构中很常见的一种场景,在该场景中,往往会涉及到以下几个问题。

    腾讯云技术服务团队
  • Git 中一个类似 Composer 的工具 – 子模块

    Composer 对于做 PHP 开发的人来说一定不陌生,也极大的方便了日常开发工作,找到合适的包直接加载一下就可以使用

    沈唁
  • 订单系统同时支持微信支付和QQ钱包 - 观察者模式&类策略模式

    十毛
  • MongoDB快速入门

    随着大数据时代的到来,数据急速增长,导致关系型数据库(SQL)越来越不够用。高性能、可扩展的数据库变得越来越重要起来,在这样的场景下,非关系型数据库(NoSQL...

    没有故事的陈师傅

扫码关注云+社区

领取腾讯云代金券