HTTP协议发展和版本

简介: HTTP协议发展和版本

 http 协议在 1991 年发布第一个版本版本号为 0.9。随后 WWW 联盟 (WWW Consortium-W3C)于 1994 年成立,http 协议被纳入到 W3C 组织中进行维护和管理。

http 协议版本发展

1 http1.0

最早在 1996 年在网页中使用,内容简单,所以浏览器的每次请求都需要与服务器建立


一个 TCP 连接,服务器处理完成后立即断开 TCP 连接(无连接),服务器不跟踪每个客户端


也不记录过去的请求(无状态),请求只能由客户端发起(单向性)。


2 http1.1

到 1999 年广泛在各大浏览器网络请求中使用,HTTP/1.0 中默认使用 Connection: close。在 HTTP/1.1 中已经默认使用 Connection: keep-alive(长连接),避免了连接建立和释放的开 销,但服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户端能够区分出每次请求的响应内容。通过 Content-Length 字段来判断当前请求的数据是否已经全部接收。不允许同时存在两个并行的响应。


1.1 中最重要的一个特点是支持“长连接”,即“一次连接可以多次请求”。

20200625151700788.png



HTTP 1.1 支持持久连接(HTTP/1.1 的默认模式使用带流水线的持久连接),在一个 TCP连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。HTTP 1.1 还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。


3 http2.0

3.1 长连接

在 HTTP/2 中,客户端向某个域名的服务器请求页面的过程中,只会创建一条 TCP 连接,即使这页面可能包含上百个资源。 单一的连接应该是 HTTP2 的主要优势,单一的连接能减少 TCP 握手带来的时延 。HTTP2 中用一条单一的长连接,避免了创建多个 TCP 连接带来的网络开销,提高了吞吐量。


3.2 多路复用 (Multiplexing)

HTTP2.0 中所有加强性能的核心是二进制传输,在 HTTP1.x 中,我们是通过文本的方式传输数据。在 HTTP2.0 中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。


20200625152314857.png


多路复用,连接共享。不同的 request 可以使用同一个连接传输(最后根据每个 request上的 id 号组合成正常的请求)。


HTTP2.0 中,有两个概念非常重要:帧(frame)和流(stream)。 帧是最小的数据单位,每个帧会标识出该帧属于哪个流,流是多个帧组成的数据流。 所谓多路复用,即在一个 TCP 连接中存在多个流,即可以同时发送多个请求,对端可以通过帧中的表示知道该帧属于哪个请求。在客户端,这些帧乱序发送,到对端后再根据每个帧首部的流标识符重新组装。通过该技术,可以避免 HTTP 旧版本的队头阻塞问题,极大提高传输性能。

20200625152400762.png



3.3 首部压缩(Header Compression)

由于 1.1 中 header 带有大量的信息,并且得重复传输,2.0 使用 encoder 来减少需要传输的 hearder 大小。


3.4 服务端推送(Server Push)

在 HTTP2.0 中,服务端可以在客户端某个请求后,主动推送其他资源。 可以想象一下,某些资源客户端是一定会请求的,这时就可以采取服务端 push 的技术,提前给客户端推送必要的资源,就可以相对减少一点延迟时间。在浏览器兼容的情况下也可以


使用 prefetch。


3.5 更安全

HTTP2.0 使用了 tls 的拓展 ALPN 做为协议升级,除此之外,HTTP2.0 对 tls 的安全性做了近一步加强,通过黑名单机制禁用了几百种不再安全的加密算法。

20200625152618498.png

目录
相关文章
|
26天前
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
56 1
|
1月前
|
网络协议 Linux
HTTP协议基本原理简介(二)
HTTP协议基本原理简介(二)
25 1
|
1月前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
144 0
|
1月前
|
缓存 前端开发
HTTP协议基本原理简介(三)
HTTP协议基本原理简介(三)
15 1
|
10天前
|
缓存 网络协议
【计算机协议】第一章——HTTP协议详解
【计算机协议】第一章——HTTP协议详解
|
11天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
13天前
|
缓存 安全 网络协议
Http协议是什么
【4月更文挑战第12天】HTTP是用于从WWW服务器传输超文本到浏览器的协议,基于TCP/IP,特点包括无连接、无状态、面向对象、无阻塞和可缓存。它的工作原理是客户端发送请求,服务器处理后返回响应。自1989年创建以来,HTTP已发展支持多媒体内容传输,并通过HTTPS提供安全保护。学习更多可参考计算机网络技术文献。
19 6
|
16天前
|
存储 JSON 前端开发
网络原理(4)HTTP协议(下)
网络原理(4)HTTP协议
27 0
|
26天前
|
XML JSON JavaScript
推荐一个比较好用的c++版本http协议库-cpp-httplib
推荐一个比较好用的c++版本http协议库-cpp-httplib
38 1
|
1月前
|
运维 监控 算法
slb监听协议http
SLB的HTTP监听器用于处理HTTP请求,配置时选择协议类型为HTTP和前端端口(如80)。SLB根据负载算法将请求转发至健康后端服务器,并支持会话保持。通过`X-Forwarded-For`和`X-Forwarded-Proto`头处理请求信息。由于不涉及SSL/TLS,数据传输不安全,推荐升级至HTTPS以加密通信。SLB提供性能监控和故障排查工具,帮助运维管理。
26 5