这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
1.0vs1.1
长连接:1.0每次请求都是tcp连接,服务器完成请求后立即断开。1.1默认持久连接,一个tcp连接有多个http请求和响应。默认开启keep-alive
缓存处理:更多可选择的缓存头来控制缓存策略
host头处理:1.0认为一个服务器唯一ip,1.1可以区分一个ip上的不同虚拟主机,支持host头域,且没有头域报400错误
错误状态码更多
带宽优化:可以请求部分资源
1.1vs2.0
二进制格式:1.1是文本格式,2.0是二进制格式
多路复用:提升效率
服务端推送
头部header压缩:encoder减少传输header大小,通过cache避免header的重复传输
http&https
http不加密
https=http+SSL/TLS
对称加密/非对称加密
对称加密算法:DES、TripleDES、RC系列、AES
非对称加密算法:RSA、DSA、Elgamal、DH、背包、Rabin、ECC椭圆
TCP&UDP
TCP协议:传输控制协议面向连接(需要连接上)的协议,能保证传输安全可靠 速度慢(有 3 次握手)
UDP协议:用户数据包协议非面向连接(不需要连接上类似消息队列)速度快,不可靠,如果可靠要参照tcp在应用层实现
TCP确保可靠数据传输的机制:序列号、确认重传、滑动窗口(进行流量控制:调整窗口大小)等
TCP机制:发送带有序列号的数据包,并在发送方有计时器,接收方收包后回复序列号,若一定时间内接收方未收到回文则重新发送该数据包
TCP打开KEEPALIVE让双方定时(2小时)发送ack包验证是否断开
heartbeat客户端每过一段时间向服务器发送包通知服务器保持连接
keepalive是系统内核,效率更高,但是只检测可连接不检测能否可用(满cpu),且如果断开连接tcp重传优先于keepalive,导致重传时间很长之后才知道
heartbeat灵活性更高可以附加是否可用信息,是应用层可以不只依赖tcp,但是要自己实现且流量更大
TCP首部开销20字节;UDP的首部开销小,只有8个字节
UDP没有拥塞控制
用UDP实现TCP:UDP模拟TCP的序号、确认重传、滑动窗口、拥塞控制