游戏开发论坛

 找回密码
 立即注册
搜索
查看: 907|回复: 0

HTTP协议优化处理

[复制链接]

2

主题

2

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2019-7-23 02:58:03 | 显示全部楼层 |阅读模式
经典提高效率的机制
1. 并行连接
可以通过建立多个 tcp连接通道来实现并行传输数据,提高页面响应速率。并行TCP连接的使用还能够一定程度上减轻RTT延迟和短连接缓启动延迟的影响。
2. 长连接
HTTP/1.1默认开启 Keep-Alive 选项,并且是 pipeline模式的。这样建立的 TCP 连接,可以在多次请求中复用。(注意:pipeline目前只能用于GETHEAD请求)
3. 缓存
3.1 Cache-control 用来控制缓存。当客户端发送的请求中包含 max-age 指令时,如果判定缓存层中,资源的缓存时间数值比指定的时间数值小,那么客户端可以接受缓存的资源;当 max-age = 0时,说明客户端不接受缓存,缓存层需要将请求转发给应用集群(通常是实时性要求很高的服务)。
3.2 If-Modified-Since 也是关于缓存的。这个选项的作用是:如果服务器的资源在某个时间之后更新了,那么客户端就应该下载最新的资源,否则服务器返回 ”304 Not Modified“ 的响应,这样也能节省带宽。
HTTP/2.0 优化措施
1. 头部压缩
将原来每次都要携带的大量 key value 在两端建立一个索引表,对相同的头只发送索引表中的索引。
2. 多路复用和分帧
将一个TCP连接中,切分成多个流,每个流都有自己的ID,并且流可以是从客户端发往服务器的,也可以是从服务器发往客户端的。流有各自的优先级。
将所有的传输消息分割为更小的帧(常见的帧有Header帧,Data帧等;不同类别的帧属于不同的流)
通过以上两种机制,客户端可以将多个请求分散到不同的流中,然后将请求的内容拆分为帧,进行二进制传输。(帧可以乱序发送,服务器端根据帧首部的流标识符重新组装,并且可以根据流优先级决定流的处理顺序)
3. 二进制编码
对帧进行二进制编码,压缩体积,提高传输效率。
QUIC(google)优化措施
1. 自定义连接机制
HTTP/2.0是基于TCP协议的,而TCP协议规定的连接是由四元组(源IP,源端口号,目的IP,目的端口号)标识的。如果其中任何一个元素发生变化,就需要重新连接。而如果在网络不稳定的情况下,这种情况是会存在的。所以如果是HTTP/2.0协议,就会因为TCP的三次握手而增加时延。
QUIC是自己定义了维护连接的机制,即用一个64位的随机数作为ID来标识,而UDP是面向无连接的,所以当IP或者端口号发生变化的时候,只要ID不变,则不需要重新连接。
2. 无阻塞的多路复用
HTTP/2.0一样,同一条 QUIC 连接上可以创建多个 stream,来发送多个 HTTP请求。但是 QUIC 是基于 UDP协议的,一个连接上的多个 stream 之间没有依赖。这样,加入 stream2 丢失了一个 UDP包,后面紧跟着 stream3 的一个 UDP 包,虽然 stream2 的那个包需要重传,但是 stream3 的包无需等待,就可以发送给客户端。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 02:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表