http1.X与2.0
HTTP
HTTP 1.X
HTTP是建立在TCP协议上的,HTTP协议的瓶颈及优化都是基于TCP协议本身的特性。
TCP建立连接时有三次握手 会有1.5RTT的延迟,为了避免每次请求都经历握手待来的延迟,应用层会选择不同策略的http长连接。
HTTP 1.0 连接不能复用以及有head of line blocking问题。
http1.0协议头里可以设置Connection:Keep-Alive。在header里设置Keep-Alive可以在一定时间内复用连接,具体复用时间的长短可以由服务器控制,一般在15s左右。到http1.1之后Connection的默认值就是Keep-Alive,如果要关闭连接复用需要显式的设置Connection:Close。
<br />
head of line blocking会因为一个request没有到达服务器或者一个response因为网络没有及时返回而影响后续所有请求。
连接复用问题
tcp长链接
http long-polling
客户端在初始状态会发送一个polling请求到服务器,服务器并不会马上返回业务数据,而是等待有新的业务数据产生时返回。所以连接会被保持,一旦结束马上又会发起一个新的polling请求,反复如此。
http streaming
与long-polling不同,server并不会结束初始的streaming请求,而是持续的通过这个通道返回最新的业务数据,但这个通道时单向的。
web socket
与传统的 tcp socket连接相似,也是基于tcp协议,并提供双向的数据通道。
解决head of line blocking
http pipelining
让每个请求不用等待其他请求的response返回之后才发出,而是几乎在同一时间把request发送给服务器。
SPDY
http 1.X存在诸多问题,在尝试了各种优化手段后提出的SPDY方案。
SPDY目标
- 降低延迟,客户端的单连接单请求,server的FIFO响应队列都是延迟的大头。
- http最初设计都是客户端发起请求,然后server响应,server无法主动push内容到客户端。
- 压缩http header,http1.x的header越来越膨胀,cookie和user agent很容易让header的size增至1kb大小,甚至更多。而且由于http的无状态特性,header必须每次request都重复携带,很浪费流量。
SPDY基础功能
- 多路复用。多路复用通过多个请求stream共享一个tcp连接的方式,解决了http 1.x hold of line blocking 的问题,降低了延迟同时提高了带宽的利用率。
- 请求优先级。多路复用带来一个新的问题,在连接共享的基础上可能导致一些关键请求被阻塞。
- header压缩。 http1.X的 header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
SPDY高级功能
- server推送。 http1.x只能由客户端发起请求,然后服务器被动的发送response。开启server push之后,server通过
X-Associated-Content header
告知客户端会有新的内容推送过来。 - server暗示。 和server push不同的是,server hint并不会主动推送内容,只是告诉有新的内容产生,内容的下载还是需要客户端主动发起请求。server hint通过
X-Subresources header
来通知。
HTTP 2.0
- 客户端向server发送request这种基本模式不会变。
- 老的scheme不会变,使用
http://和https://
的服务和应用不会要做任何更改。 - 使用http1.x的客户端和服务器可以无缝的通过代理方式转接到http2.0 上
- 不识别http2.0的代理服务器可以将请求降级到http1.x
HTTP 2.0主要改动
新的二进制格式
http 1.x是明文协议,格式由strat line
,header
,body
组成。需要做协议解析来识别这3哥部分,http1.x的解析是基于文本的,而文本格式解析存在天然缺陷,二进制比文本格式更方便且健壮。
http 2.0的格式定义更接近tcp。由Length
,Type
,Flags
,Stream ID
,Payload
5个部分组成。
length
定义了整个frame的开始到结束type
定义frame的类型flags
用bit位定义了一些重要的参数stream id
用作流控制payload
就是request的正文
连接共享
stream id
作用就是连接共享机制,一个request对应一个stream并分配一个id,这样一个连接上可以有多个stream,每个stream的frame随机混杂在一起,接收方根据stream id将frame再归属到各自不同的request里面。每个stream都可以设置优先级和依赖。
header压缩
http2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,避免重复header传输,减少传输大小。
压缩算法选择
SPDY/2使用的是gzip 压缩算法,后来出现BREACH
和CRIME
2种攻击方式,即使走SSL的SPDY也可以破解内容,http2.0采用HPACK
的压缩算法。
重置连接表现
对于http 1.x来说,是通过设置tcp segment里的reset flag来通知对端关闭连接。http2.0引入RST_STREAM
类型的frame,可以在不断开连接的前提下取消某个request的stream。
流量控制
http2.0 通过类似receive window
的做法,数据的接收方通过告知对方自己的flow window
大小表明自己还能接收多少数据。只有Data类型的 frame才有流量控制功能。
服务推送
http2.0 通过push的方式将客户端需求的内容预先推送过去,也叫cache push
。如果客户端退出,需取消server push
,可以通过发送RST_STREAM
类型的frame来做到。
Nagle Algorithm/TCP Delayed Ack
Nagle Algorithm/TCP Delayed Ack
是一组对立的算法。http2.0可以通过TCP_NODELAY
禁用Nagle或TCP_QUICKACK
禁用ACK。官方推荐设置TCP_NODELAY
更安全的SSL
HTTP2.0使用了tls的拓展ALPN来做协议升级,除此之外加密这块还有一个改动,HTTP2.0对tls的安全性做了近一步加强
http1.X与2.0的更多相关文章
- Web 协议 HTTP1.0 HTTP1.1 SPDY HTTP2.0
Web 协议 HTTP1.0 HTTP1.1 SPDY HTTP2.0 HTTP1.0 VS HTTP1.1 长连接HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而H ...
- HTTP、HTTP1.0、HTTP1.1、HTTP2.0——笔记
笔记来源地址:https://mp.weixin.qq.com/s/T2IErLDxbWP1a-VbRkZZHg HTTP: HTTP是WWW数据通信的基础,是应用层协议. HTTP是干什么的?用来给 ...
- Http1.1和http2.0
HTTP2.0 最近在读一本书叫<web性能权威指南>谷歌公司高性能团队核心成员的权威之作. 一直听说HTTP2.0,对此也仅仅是耳闻,没有具体研读过,这次正好有两个篇章,分别讲HTTP1 ...
- HTTP1.0和HTTP1.1以及HTTP2.0的区别
(1)连接方面 HTTP1.0使用非持久连接,即在非持久连接下,一个tcp连接只传输一个Web对象.每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个对象,严重影响客户机和服务器的性能. H ...
- http1.1与http2.0
简介 http1.0: 1.0版本中每个TCP连接只能发送一个请求,数据发送完毕连接就关闭,如果还要请求其他资源,就必须重新建立TCP连接.(TCP为了保证正确性和可靠性需要客户端和服务器三次握手和四 ...
- HTTP1.0和HTTP1.1和HTTP2.0的区别
1 HTTP1.0和HTTP1.1的区别1.1 长连接(Persistent Connection) HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求 ...
- HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
一.HTTP的历史 早在 HTTP 建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.也是说对于前端来说,我们所写的HTML页面将要放在我们的 web 服务器上 ...
- HTTP1.0、HTTP1.1和HTTP2.0的区别
一.HTTP的历史 早在HTTP建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.也是说对于前端来说,我们所写的HTML页面将要放在我们的web服务器上,用户端 ...
- 杂谈:HTTP1.1 与 HTTP2.0 知多少?
HTTP是应用层协议,是基于TCP底层协议而来. TCP的机制限定,每建立一个连接需要3次握手,断开连接则需要4次挥手. HTTP协议采用"请求-应答"模式,HTTP1.0下,HT ...
随机推荐
- oracle 基础笔记
sqlplus / as sysbda;-- 运行命令conn scott/tiger [as sysdba];-- 登录show user;查看当前用户alter user scott accoun ...
- 两种实现光标点插入range
一.insertNode <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- AngularJS实现原理
个人觉得,要很好的理解AngularJS的运行机制,才能尽可能避免掉到坑里面去.在这篇文章中,我将根据网上的资料和自己的理解对AngularJS的在启动后,每一步都做了些什么,做一个比较清楚详细的解析 ...
- CentOS 7运维管理笔记(9)----Apache 安全控制与认证
Apache 提供了多种安全控制手段,包括设置Web访问控制.用户登陆密码认证及 .htaccess 文件等.通过这些技术手段,可以进一步提升Apache服务器的安全级别,减少服务器受攻击或数据被窃取 ...
- Storm Flow
A Stream represents the core data model in Trident, and can be thought of as a "stream" of ...
- ArcGIS中国工具(ArcGISCTools)2.0在线视频
查看地址:http://i.youku.com/gisoracle 在线看的不太清楚,支持下载视频地址 使用手册下载地址:http://pan.baidu.com/s/1kTsTyXT操作视频下载地址 ...
- 基于容器微服务的PaaS云平台设计(一) 实现容器微服务和持续集成
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 前言:关于什么是容器微服务PaaS和容器微服务PaaS的 ...
- svnkit递归获取指定目录下的全部文件
package demo.wc; import java.util.Collection; import java.util.Iterator; import org.tmatesoft.svn.co ...
- Oracle案例05——ORA-12162: TNS:net service name is incorrectly specified
最近在梳理环境,发现环境真的不是一般的复杂,配置不是一般的乱,刚在梳理环境的时候发现一个库通过conn /as sysdba无法连接,具体处理过程如下: 一.错误信息 [oracle@ ~]$ sql ...
- MySQL案例02:ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
MySQL在授权用户时出现报错信息,具体信息如下: 一.错误信息 执行命令: GRANT SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SH ...