HTTP1.0, HTTP1.1,HTTP2.0 区别及如何升级

本文详细介绍了HTTP协议从1.0到2.0的演进,包括HTTP1.0的无状态、短连接特性,HTTP1.1引入的长连接、请求管道化、缓存处理和Host字段,以及HTTP2.0的二进制传输、多路复用、头部压缩和服务器推送等关键改进。这些演进显著提升了网络效率和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、HTTP1.0

特点:无状态、短连接

HTTP1.0规定浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(短连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

二、HTTP1.1

特点:长连接、请求管道化、缓存处理、Host字段、断点传输

① 长连接

HTTP1.1增加了一个Connection字段,通过设置Keep-Alive可以保持HTTP连接不断开,避免了每次客户端与服务器请求都要重复建立释放建立TCP连接,提高了网络的利用率。如果客户端想关闭HTTP连接,可以在请求头中携带Connection: false来告知服务器关闭请求。

② 请求管道化、

基于HTTP1.1的长连接,使得请求管线化成为可能。管线化使得请求能够“并行”传输。举个例子来说,假如响应的主体是一个html页面,页面中包含了很多img,这个时候keep-alive就起了很大的作用,能够进行“并行”发送多个请求。(注意这里的“并行”并不是真正意义上的并行传输,具体解释如下。)

需要注意的是,服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户端能够区分出每次请求的响应内容。

也就是说,HTTP管道化可以让我们把先进先出队列从客户端(请求队列)迁移到服务端(响应队列)。

③ 缓存处理

HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

④ Host字段

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

⑤ 断点传输

在上传/下载时,将任务(一个文件或压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传/下载,如果碰到网络故障,可以从已经上传/下载的部分开始继续上传/下载未完成的部分,而没有必要从头开始上传/下载。可以节省时间,提高速度。

三、HTTP2.0

特点:二进制传输、多路复用、头部压缩、服务器推送

HTTP2.0 最大的特点就是多路复用机制,对同一个域的服务器只建立一次TCP连接,并使用二进制方式传输数据,加载多个资源,同时会对http头部进行压缩。

① 二进制传输

HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

② 多路复用(或连接共享)

每一个request请求都是共享连接的。由于一个request对应一个id,这样一个连接上就可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的id将request再归属到各自不同的服务端请求里面。可见,HTTP2.0实现了真正的并行传输,它能够在一个TCP上进行任意数量的HTTP请求。

③ 头部压缩

HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

④ 服务器推送

http1.x中,网页的加载过程是这样的:请求主网页 => 解析网页 => 请求页面内的依赖资源(如 js、css 、图片等静态文件) => 加载依赖资源。由于每一个依赖资源都必须明确地向服务器端发送请求,这样会导致加载过程非常缓慢。但是在http2.0中,服务器在响应浏览器第一个请求的时候,就可以开始推送这些依赖的资源,而无需客户端明确的向其发起请求。

四、升级到 HTTP2.0

由于 HTTP2.0 基本上只支持https协议,所以要确保网站必须支持https访问才行。SSL的安装与配置此处省略,此处只讨论Apache与Nginx服务器中如何配置http2.0。

Nginx配置http2.0

修改nginx.conf配置文件,加入如下内容:

server {
    listen 443 ssl http2;
    server_name 域名;

    ssl_certificate             /root/your.cert;
    ssl_certificate_key         /root/your.key;
    ssl_session_timeout         10m;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers                 HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
    ssl_prefer_server_ciphers   on;

}

Apache2.4配置http2.0

修改 httpd.conf 文件

将 LoadModule http2_module modules/mod_http2.so 前面的注释取消掉,即可启用http2模块。启用之后,还需要做如下配置:

如果是对全局启用,在 httpd.conf 文件中加入下面的配置即可。

Listen 443
<IfModule http2_module>
    ProtocolsHonorOrder On
	LogLevel http2:info
    Protocols h2 h2c http/1.1
</IfModule>

如果是对某个虚拟主机启用,则需要在 httpd-vhosts.conf 文件中加入下面的配置。

<VirtualHost *:443>
	ServerName 域名
	DocumentRoot "项目根目录"
	<Directory "/">
        Options None
        AllowOverride All
        Require all granted
	</Directory>
	<IfModule http2_module>
        ProtocolsHonorOrder On
        LogLevel http2:info
        Protocols h2 h2c http/1.1
	</IfModule>
</VirtualHost>

注意:此处使用的是 https 默认的443端口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

富足奶茶

有钱的捧个钱场,没钱的点个赞吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值