1. HTTP(1.1)的优点有哪些,怎么体现的?
HTTP最凸出的优点是「简单、灵活和易于扩展、应⽤⼴泛 和跨平台」。
1.1 简单 HTTP基本的报⽂格式就是header+body,头部信息也是 key-value简单⽂本的形式,易于理解,降低了学习和使⽤ 的⻔槛。
1.2 灵活和易于扩展 HTTP协议⾥的各类请求⽅法、URI/URL、状态码、头字段等 每个组成要求都没有被固定死,都允许开发⼈员⾃定义和扩 充。
2. HTTP的缺点呢?
HTTP协议⾥有优缺点⼀体的双刃剑,分别是「⽆状态、明⽂传输」,同时还 有⼀⼤缺点「不安全」。
⽆状态双刃剑:
优点:因为服务器不会去记忆HTTP的状态,所以不需要额外的资源 来记录状态信息,这能减轻服务器的负担,能够把更多的CPU和内存⽤来对 外提供服务。
缺点:既然服务器没有记忆能⼒,它在完成有关联性的操作时会⾮常 麻烦。
3. HTTP/1.1 的性能如何?
HTTP协议是基于TCP/IP,并且使⽤了「请求-应答」的通信模式,所以性 能的关键就在这两点⾥。
早期HTTP/1.0性能上的⼀个很⼤的问题,那就是每发起⼀个请求,都要新建 ⼀次TCP连接(三次握⼿),⽽且是串⾏请求,做了⽆谓的TCP连接建⽴和 断开,增加了通信开销。
3.1长连接
为了解决上述TCP连接问题,HTTP/1.1提出了⻓连接的通信⽅式,也叫持久连接。这种⽅式的好处在于减少了TCP连接的重复建⽴和断开所造成的额外开 销,减轻了服务器端的负载。
持久连接的特点:只要任意⼀端没有明确提出断开连接,则保持TCP连接 状态。
3.2 管道⽹络传输
即可在同⼀个 TCP 连接⾥⾯,客户端可以发起多个请求,只要第⼀个请求发出去了,不必等其回来,就可以发第⼆个请求出去,可以减少整体的响应时间。
举例来说,客户端需要请求两个资源。以前的做法是,在同⼀个TCP连接⾥⾯,先发送 A 请求,然后等待服务器做出回应,收到后再发出 B 请求。管道机制则是允许浏览器同时发出 A 请求和 B 请求。
但是服务器还是按照顺序,先回应 A 请求,完成后再回应 B 请求。要是前⾯的回应特别慢,后⾯就会有许多请求排队等着。这称为「队头堵塞」
3.3 问题: 队头阻塞
因为当顺序发送的请求序列中的⼀个请求因为某种原因被阻塞时,在后⾯排队的所有请求也⼀同被阻塞了,会招致客户端⼀直请求不到数据,这也就是「队头阻塞」。