HTTP性能优化一直是个十分重要的话题,但要进行优化,首先得找出有哪些地方会导致HTTP延时。

HTTP 请求过程

在HTTP请求传输的过程中,会经历这样的场景和可能遇见如下的问题:

1 . 用户输入或打开一个地址,client查找本地http缓存,如果有未过期的本地缓存,则直接200(from cache),请求结束。

现代浏览器有这样的机制,在访问server时,由server返回的HTTP响应头控制。

2 . client查找本地DNS缓存查看是否已有DNS信息,如果没有,则向DNS解析服务器请求server的IP地址

当本地DNS缓存中已有本次访问所需的信息,那么这里几乎是无延迟的,但如果client需要向DNS解析服务器请求,则会有一定的延时

3 . client向server发送一条TCP连接请求,并等待server的响应。

在这里,开始TCP的三次握手建立连接。如果client和server的网络情况并不好(网络抖动、地域过远、连接拥挤等),则会花费很长的时间。

4 . 一旦连接建立起来,则client通过新建立的TCP管道向server发送HTTP请求,当数据到达时,server从TCP管道中读取请求的报文,并对请求进行处理

在这里,依然有可能受到网络的影响,使得请求报文的传输较慢,或者是当server的负载过高,或者是server处理的是一个复杂的动态资源,或者是server底层依赖的上游服务响应较慢(例如server作为反向代理),都会使得这一阶段的延时增加。

5 . server将处理完毕后的HTTP响应,通过TCP管道回送到client。

在这里,依然可能被网络情况所影响。

6 . 请求/响应 的内容过长,也会使得传输的时间变长,毕竟传输速度不变的情况下,内容越多,所需时间越长。

所以这样一个简单请求中,也包含了硬件速度、网络、服务器负载、请求/响应报文尺寸、client/server的距离等这么多的坑等着你踩。