「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战」。
前言
http相关的知识点比较零碎,每次都是面试的之前复习,这里把自己经常忽略的一些知识点汇总一下,便于以后翻阅。
HTTP版本差异
http1.x
- http1.0 最早在
1996使用,那个时候只是使用一些较为简单的网页上和网络请求上; - http1.1 在
1999年广泛应用于现在的各大浏览器网络请求。 区别:
1、缓存处理
- http1.0 的头部通过
if-modified-since,expires来作为缓存判断的标准- http1.1 则引入了更多的缓存控制策略 如
entity tag等等,可供选择的缓存头
2、带宽优化和网络请求使用
- http1.0 存在浪费带宽的情况,比如客户端只是需要某个对象的部分字段,服务器会将整个对象返回,并且不支持断点续传功能
- http1.1 在头部引入了
range头域,它允许请求资源的部分,返回码是206
3、错误通知管理
http1.1 新增了
24个错误状态响应码
如409请求的资源和当前资源的状态发生冲突410表示服务器上的某个资源将永久删除
4、host 头处理
http1.0 认为每台服务器都绑定一个唯一的
IP地址,因此请求头并没有传递主机名,但是现在一台物理服务器上面可以存在多个虚拟主机,并且他们共享一个IP地址,所以 http1.1 的请求信息和返回信息都支持host头域,并且如果请求头中没有传入host头域 就会报错400 (bad request)
5、长连接
http1.1 支持长连接和流水线连接 ,在一个TCP 连接上可以传送多个
http请求 ,减少建立连接和关闭连接的消耗和延迟 http1.1 默认开启connection: keep-alive,一定程度减少每次http请求都要创建连接的缺陷
http2.x
1、http2.x 使用二进制传送、http1.x 使用文本传送
二进制的传送单位是帧和流, 帧组成了流,同时流还有流
ID标识
2、http2.x 支持多路复用
因为有流
ID标识,同一个http请求可以实现多个http请求传输,可以通过流ID来定位到具体是那个http请求
3、http2.x 头部压缩
http2.x 通过
gzip和comproess压缩头部然后再进行传送,同时客户端和服务器同时维护一张头部信息表,所有的字段都记录在这张表中,这样后面每次传输只需要传输表中的索引ID,通过索引ID查询表头的值
4、http2.x 支持服务器推送
http2.x在未经客户端许可的情况下,,可以主动向客户端推送内容
http优化
从两个方面考虑
1、带宽 (现在网络建设发达,一般不需要考虑带宽问题)
2、延迟
1)浏览器阻塞
根据不同浏览器内核,同时连接数不同,超过浏览器最大连接限制,后续请求会被阻塞
2)DNS 查询
通过DNS减少浏览器和目标服务器建立连接的时间
3)建立连接
http是基于TCP协议的,浏览器最快也要三次握手才能捎带http报文,达到真正的建立连接,这些连接无法复用,每次请求都要三次握手产生较高的延迟(http2.x支持多路复用)
http 和 https 的一些区别
1、https需要申请 CA 证书,一般都是需要花钱的
2、http 是运行TCP之上的, 所有的传送内容都是明文
https 是基于
SSL/TLS之上的,SSL/TLS是运行在TCP之上的,所有的传输内容都是加密的
3、http 和 https 的连接方式不同,使用的端口也是不同的
http 端口
80
https 端口443