http协议的前世今生

一: 结构图:


二 : http特性

状态码:

1: http响应报文中状态码的意义: 不仅作为错误码使用, 而且有指示客户端下一步如何行动的用途. 有点像连麦服务器: 推流过载时返回客户端(“尝试下一个ip”)

2:状态码不见得只有200是正确的, 204也是ok的

3:实际项目中可以用状态码, 作为客户端是否可以继续重试的标准

重要头部字段学习

1:accept语义: 希望我这边接受什么数据类型,Content-Type: 对方应该按什么类型解析

http传输大文件的方法

1: 压缩

2: 化整为零: 分块传输:chunk

3: 范围请求: accept-range

总结:以上3中方法, 可以混合使用

http连接管理

1: 短连接: 效率慢

2: 长链接: 解决1的问题, 提高传输效率

3: pipeline: 解决4问题: 但是有缺点: 可以发送一批请求, 某种意义上做到了并发.  但是有限制: 就是不能立即回复, 按请求顺序发送回复. 严格意义并没有解决队头阻塞问题, 本质原因: 没有办法将请求和响应用序号对应起来. 所以必须按顺序发送回复

4: 队头阻塞: 只有前面的请求处理处理完之后收到回复才会发送下一个请求

解决方案: 1: 并发连接  2: {3}

http中的重定向

应用场景: 网站变更, 域名变更, 服务器临时维护

http中的cookie机制

1: 弥补无状态的缺点

2: 增加记忆能力

3: 使用第三方cookie: 意味无论你在那里服务器都会认识你, 实现广告的精准投放

4:  服务器生成, 浏览器缓存

http中的缓存机制

1: 服务器告诉浏览器是否可以缓存, 并且可以告诉缓存的时间大小

2: 浏览器也可以强制刷新数据, 无视缓存

http代理

1: http代理如果想要知道客户端的真实IP地址,可以使用字段“X-Forwarded-For”和“X-Real-IP“.

2: 专门的“代理协议”可以在不改动原始报文的情况下传递客户端的真实IP。

http缓存服务器:

1: 类似于代理服务器

2: 需要cache-control和purge的控制

http优缺点

优点:

1:简单, 灵活, 易于扩展,

2:无状态

缺点:

1: head用明文传输, 用抓包工具可以看到, 不安全

2:队头阻塞

三: http/2

1: 主要目标: 对http做性能优化

2: 头部压缩:  http/1主要的压缩是对body进行的, 但却忽视了header: 采用hpack算法

3: 采用二进制形式: 体积小, 速度快, 原来的header和body变成二进制帧

4: 虚拟化stream概念: 同消息往返的帧有相同唯一的stream_id, 可以理解为里面流动的有许多steam, 但是同stream的帧是有先后顺序的. 从stream层面看, 二进制帧是有顺序的, 但是从连接层面的, 是无序的; 由于有了streamid, 可以将请求和回复对应在一起, 也就没有了队头阻塞问题

5: 改变了请求-应答模型, 服务器可以主动push消息

在概念上,⼀个HTTP/2的流就等同于⼀个HTTP/1⾥的“请求-应答”。在HTTP/1⾥⼀个“请求-响应”报⽂来回是⼀次HTTP通信,在HTTP/2⾥⼀个流也承载了相同的功能。


四: http3.0

1:完全解决了队头阻塞的问题: 将底层的tcp换成udp, 因为tcp的有序性天然存在队头阻塞问题

2:使用quic协议:  支持连接迁移 比如网络切换不需要重新建立连接

五: Cdn

1: 可以加速访问http服务

2: 解决跨网访问慢的问题

3: cdn运行原理: 全局负载均衡 + 缓存系统

全局负载均衡: 寻找边缘节点, 按地理位置, 运营商网络, 负载能力.

六: Websocket

1: 解决http实时通信难的问题

2: 全双工, http是半双工

3: 采用二进制帧结构

七: http性能优化

1: cdn解决了中间一公里的问题

2:企业应该致力于解决第一公里的问题

3:最后一公里无法控制

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容