HTTP1.0、1.1、2.0的关系和区别以及编码和字符集的解释

目录

一、关于HTTP的网络请求

二、HTTP1.0和1.1的区别

三、HTTP2.0

四、编码释义

五、字符集释义

(一)ASCII字符集

(二)GB2312

(三)UTF-8 编码


一、关于HTTP的网络请求

总的来说,影响一个 HTTP 网络请求的因素主要有两个:带宽、延迟

随着网络建设逐步完善,目前基本上已经不会再因为宽带影响网速,因此,延迟便是网速的首要拦路虎。

延迟的三点要素:

  • 浏览器阻塞(HOL blocking):浏览器会因为一些原因阻塞请求。浏览器对于同一个域名,同时只能有 4 个连接(这个根据浏览器内核不同可能会有所差异),超过浏览器最大连接数限制,后续请求就会被阻塞。
  • DNS 查询(DNS Lookup):浏览器需要知道目标服务器的 IP 才能建立连接。将域名解析为 IP 的这个系统就是 DNS。这个通常可以利用DNS缓存结果来达到减少这个时间的目的。
  • 建立连接(Initial connection):HTTP 是基于 TCP 协议的,浏览器最快也要在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。

注:以上三点要素来源于作者:一只好奇的茂。

二、HTTP1.0和1.1的区别

HTTP1.0于1996年在网页中被使用,且只是使用在一些较为简单的网页和网络请求上,而HTTP1.1则是于1999年才开始广泛应用于各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 

二者的区别主要体现在:

 1.缓存处理:

  • HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准。

  • HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

 2.带宽优化及网络连接的使用:

  • HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,且不支持断点续传功能。
  • HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,方便了开发者自由的选择以便于充分利用带宽和连接。

 3.错误通知的管理:

  • 在HTTP1.1中新增了多个错误状态响应码,如:413(Request Entity Too Large)表示服务器拒绝处理请求,因为请求实体大于服务器愿意或能够处理的实体、415(UNsupported Media Type)表示服务器拒绝为请求提供服务,因为请求的实体的格式不受请求的方法所请求的资源支持等等。

 4.Host头处理:

  • HTTP1.0中每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,且它们共享一个IP地址。
  • HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

 5.长连接:

  • HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。

三、HTTP2.0

 可以说HTTP2.0较于HTTP1.1在性能上有很大幅度的提升,与HTTP1.x相比,增加了几点新特性:

 1.新的二进制格式:

  • HTTP1.x的解析是基于文本。而基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,需要考虑多种场景才能达到一个良好的健壮性。
  • 二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现更为方便,健壮性也较良好。

 2.多路复用

  • HTTP2.0采用多路复用技术,这样的好处在于其发出的多个请求可以在同一个连接上并行处理,当请求数量较大时,不会因为某一个请求任务过重而导致其他任务无法正常执行。
  • 对于HTTP1.0采用的是多个请求串行的单线程处理,当某一个任务卡死之后,其他请求也因此无法继续执行,会造成堵塞。

具体可参见以下图示:

注:此图来源于:一只好奇的茂

 3.头部数据压缩:

  • HTTP1.x的header带有大量信息,而且每次都要重复发送,随着Web功能越来越复杂,每个页面产生的请求数也越来越多,导致消耗在头部的流量会越来越多。
  • HTTP2.0使用encoder以减少需要传输的header大小,通讯双方各自cache一份header fields表,在避免了重复header的传输的同时,也减小了需要传输的大小。

注:HTTP2.0支持非HTTPS,而且HTTP2.0完全兼容HTTP1.x的语义,对于不支持HTTP2.0的浏览器,NGINX会自动向下兼容。

四、编码释义

编码(Encoding)是一种计算机编程语言的代码,是信息从一种形式或格式转换为另一种形式的过程,是根据一定的协议或格式把模拟信息转换成比特流的过程。通常是用预先规定的方法将文字、数字或其他对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。

  • 在计算机硬件中,编码是在一个主题或单元上为数据存储,管理和分析的目的而转换信息为编码值(典型地如数字)的过程。在软件中,编码意味着逻辑地使用一个特定的语言如C或C++来执行一个程序。
  • 将数据转换为代码或编码字符,并能译为原数据形式。是计算机书写指令的过程,程序设计中的一部分。在地图自动制图中,按一定规则用数字与字母表示地图内容的过程,通过编码,使计算机能识别地图的各地理要素。
  • n位二进制数可以组合成2的n次方个不同的信息,给每个信息规定一个具体码组,这种过程也叫编码。

五、字符集释义

字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础。

  • 字符集是指用来组织、控制或表示数据项的字母、数字以及计算机能识别的符号。例如,纸带或穿孔卡片上的输入符号,各种输出设备的控制和输出符号,终端设备上的键盘字符以及存储在存储区中,供处理机存、取和识别的符号。
  • 高级语言能识别的,并在语法上有意义的所有字符的集合,称为该语言的字符集。一般微型计算机的BASIC语言字符集,含字符约60个,包括拉丁字母、十进制数码、运算符、圆括号、比较符、标点符号及某些特殊符号($、#等)。其他符号(包括汉字)则可以按规定的办法,作为字符型数据来处理。
  • 各种字符(包括标点符号)要按语法组合成有确切含义的成份,构成数据项、指令、语句以至程序段。计算机语言中各种符号的使用,要比自然语言中更严格。

下面介绍几种常用字符集:

(一)ASCII字符集

 特点:

  • 它主要用于显示现代英语和其他西欧语言,是最通用的单字节编码系统,并等同于国际标准ISO 646

包含内容:

  • 控制字符:回车键、退格、换行键等。
  • 可显示字符:英文大小写字符、阿拉伯数字和西文符号。 

 扩展字符集:

  • 7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,  ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。
  • ASCII扩展字符集:它是从ASCII字符集扩充出来的,扩充后的符号增加了表格符号、计算符号、希腊字母和特殊的拉丁符号。  

(二)GB2312

特点:

  • GB2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。

包含内容:

  • GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。其中包括6763个汉字,其中一级汉字3755个,二级汉字3008个;包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

技术特征

(1)分区表示:

  • GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。
  • 各区包含的字符如下:01-09区为特殊符号;16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序;10-15区及88-94区则未有编码。

(2)双字节表示

  • 两个字节中前面的字节为第一字节,后面的字节为第二字节。习惯上称第一字节为“高字节” ,而称第二字节为“低字节”。

(三)UTF-8 编码

  1. UTF-8是Unicode的其中一个使用方式。 UTF Unicode Tranformation Format,即把Unicode转做某种格式的意思。
  2. UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。
  3. UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。
  4. UTF-88-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson1992年创建。已经标准化为RFC 3629UTF-816个字节编码UNICODE字符。 

UTF-16 和 UTF-32 以及UTF-8编码比较:

  • UTF-32UTF-16 UTF-8 Unicode 标准的编码字符集的字符编码方案。
  • UTF-16 使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码。
  • UTF-32 即将每一个 Unicode 代码点表示为相同值的 32 位整数。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值