目录

一、关于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%的使用频率,基本满足了汉字的计算机处理需要。

包含内容:

技术特征

(1)分区表示:

(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-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。

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

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

  1. HTTP1.0,1.1,2.0,HTTPS

    HTTP1.0/1.1/2.0/HTTPS HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接收HTML页 ...

  2. 【Vue2.0】—Vue与Component的关系(十二)

    [Vue2.0]-Vue与VueComponent的关系(十二) <body><div id="root"><h2>{{name}}</h ...

  3. 0、空字符和‘\0‘关系

    0.空字符和'\0'关系 ASCII码用于表示字符,存储字符就是存储其ASCII码 ASCII码值 0 表示空字符,也就是 '\0' (字符串结束符) 字符 '0',ASCII码值为 48 字符串&q ...

  4. 方阵可逆,方阵行列式≠0,方阵满秩三者关系推导

    首先明确这三者是等价的. 接下来我们得先明确概念的定义: ①方阵可逆:即方阵存在逆阵,使:AA^-1=E; ②矩阵行列式:即由矩阵的全部元素构成的行列式; ③方阵的秩:等于方阵n个列向量所构成的向量组 ...

  5. 详解127.0.0.1和localhost的关系和区别

    详解127.0.0.1和localhost的关系和区别 前情: 周三有同事突然问 127.0.0.1和localhost有什么不同吗,正好利用这个机会整理一下,这个虽然是大家常见的知识点,但是估计很多 ...

  6. 蓝牙4.0、经典蓝牙、BT、BLE的关系与区别

    蓝牙3.0 比较老的标准了. 蓝牙4.0   蓝牙4.0标准是2012年推出的蓝牙标准,是蓝牙3.0的升级版本,相比3.0版本它更省电.成本更低,3毫秒低延迟.具有超长有效连接距离和AES-128加密 ...

  7. 二维数组a的数组名a,a[0],a,a[0]的联系,和指针的关系

    例:int a[2][3]={{1,2,3},{4,5,6}}; 1.二维数组的模样: 类似于一维数组,数组名代表首元素地址,对于二维数组,a[0][0],a[0][1],a[0][2]为第一行元素, ...

  8. 新手教学看eMule 0.50a Xtreme 8.0设置

    新手教学看eMule 0.50a Xtreme 8.0设置 转自:http://hi.baidu.com/dianlvzhijia/item/1b554c9383b23415924f4194 虽然Xt ...

  9. Aurora 8B/10B、PCIe 2.0、SRIO 2.0三种协议比较

    在高性能雷达信号处理机研制中,高速串行总线正逐步取代并行总线.业界广泛使用的Xilinx公司Virtex-6系列FPGA支持多种高速串行通信协议,本文针对其中较为常用的Aurora 8B/10B和PC ...

最新文章

  1. vue中显示和隐藏如何做动画_vue-State Transitions(状态转换)
  2. 30005 rust_Steam三连冠老游戏《腐蚀(RUST)》为什么突然火起来了?
  3. PPP协议的CHAP验证
  4. OpenCV实现图像金字塔
  5. C++实用技巧(四)
  6. 初学总结--------Java修饰符与修饰关键字(且叫修饰关键字)
  7. office安装出现windows installer服务不能更新一个或多个受保护的windows文件
  8. nginx/windows: nginx多虚拟主机配置
  9. 偏最小二乘法与最小二乘法的区别
  10. 村上春树 --《当我谈跑步时,我谈些什么》句子摘录​
  11. UltraCompare比较文件时出现UTF8_ConvertorForMac无转换符号!
  12. 谷歌翻译插件突然不可用提示Tkk更新失败的解决办法
  13. 泰坦尼克号沉船数据分析与可视化、数据建模与分类预测【Python | 机器学习-Sklearn】
  14. android菜单键 r9,Android OPPO R9 后台 无法启动 Activity 问题
  15. 2019互联网公司100强
  16. 10个程序员最喜欢的 HTML和CSS 等在线代码编辑器——pow_na的博客
  17. 马斯克再次在推特闯祸 年产50万辆电动汽车推文涉嫌违反和解协议
  18. 4 年 Java 经验面试总结、心得体会(太全面了!!都会就无敌了)
  19. 如何写好面向对象程序
  20. 【C/C++】VS的cl命令 | 配置环境变量 | 使用命令行编译C/C++程序

热门文章

  1. 创新实训——飞讯(三)
  2. 华为一面+二面(一二面代码都没撕出来)
  3. 总算初步解决ecryptfs加密主目录的问题了
  4. CMake 的常用命令
  5. 没钱买 mac ? 一招教你如何让 Windows 秒变【苹果电脑】
  6. QPixmap的用法
  7. 背包问题【01、完全(恰好or不超过)、多重】【尚未整理完】
  8. 魔众帮助中心管理系统 v3.3.0
  9. c语言中的输入输出函数之printf函数
  10. fluentd mysql_使用fluentd实时收到nginx日志到mysql数据库