HTTP/1.x的连接管理
?
HTTP/1.x有三种连接管理方式:
- 长连接(Persistent connect)
- 节省了TCP连接握手的时间
- 在空闲状态,也是会消耗服务器资源
- 如果在负载较高时会有大量的连接建立,可能遭受Ddos,这种情况下使用短连接,快速关闭空闲的连接,对性能提升有好处。
- 可以重复发送一系列的请求,通过Connection头部设置为Keep-Alive来实现长连接,连接关闭时将其设置为Close。
- 这个连接不会一直保留着,在空闲一段时间后会被关闭(服务器可以使用Keep-Alive头设置最小保持连接时间)
- HTTP/1.1默认就是长连接。
- 好处:
- 不足:
- 短连接(Short-lived connections)
- HTTP/1.0默认是短连接
- 每个HTTP请求都由自己的独立连接完成,每个HTTP请求之前都会建立TCP连接
- TCP握手是耗时的操作,短连接破坏了TCP具备的能力
- HTTP Pipeline
- 节省了HTTP请求间的等待时间(连接延迟)
- 多个HTTP请求可能被打包到同一个TCP消息包中,可以提升性能
- MSS最大段大小
- TCP协议允许的从对方收到数据的最大报文段,是通信双方能使用的最大报文段。
- 默认值是536,正好可以构成一个576字节的IPV4数据报。IPV4的最小是576个字节,20 + 20 + 536 = 576
- 如果HTTP请求在一个TCP消息包放不下,可以设置TCP的MSS(Maximum Segment Size)选项
- MSS最大段大小
- HEAD
- GET
- PUT
- DELETE
- 默认情况下,HTTP是按顺序发出的。下一个请求要等待当前请求收到应答后才会被发出。
- 一次按顺序发送多个连续的请求到服务器,不用等待前一个请求应答返回,可以避免连接延迟。
- 好处:
- 只有幂等(idempotent)的方式能被安全的重试,当有故障发生时,pipeline的内容要能被轻易的重试。
- 域名分片(doman sharding)
- 如,www.example.com这个域名可以被拆分为3个域名,这些域名都指向同一台服务器:
- www1.example.com
- www2.example.com
- www3.example.com
- 浏览器会同时为每个域名建立6条连接
- 分配多个域名到网站,浏览器为每个域名建立多个连接,来实现并发请求。默认情况下一个域名的连接数为6。
- 可以快速响应网站的应答,使客户端建立多个连接。
- 如,www.example.com这个域名可以被拆分为3个域名,这些域名都指向同一台服务器:
?
参考:
原文:https://blog.51cto.com/jlnetc/2984737