http解释
全称"超文本传输协议" ,解释如下
- 超文本 指代text,video,image 等二进制文件
- 传输 顾名思义用于传输数据
- 协议 互联网中最基础的协议,是一切协议的基础,几乎都可以与其搭上关系
http协议的优缺点
- 明文, 即可感知的,整个传输对于客户端可见,对于开发者是优点,方便调试,诸如抓包以及谷歌的调试工具。对于黑客来说是优点,对于用户是缺点,诸如公共场合的黑wifi
- 无状态 即每次请求都要重新向服务器确认身份,本身是无感知的,直至后期加入了cookie,才有改善
- 扩展性强 由于http协议只是一个基础规范,所以很多协议可以在他的基础上添砖加瓦 ,本身http协议只是规定了 请求方式+header+body 大致框架
http的连接方式
http连接的发展历程以及原因
- 短连接(目前基本已基本为长连接)
- 短连接每一次连接都需要经历TCP的三次握手,才能与服务器保持关联,而这种方式无疑加大了服务器的压力,每一次连接都是非常昂贵的
- 长连接
- 长连接的原理是在例如nginx上,设置一个响应时间,在这个时间段服务器都会与客户端保持关联,不会像短链接一样请求一次就要经历TCP三次握手的过程,此操作大大减少了服务器的压力
- 双向通信webSocket
在没有出现webSocket之前,仅能使用轮询的方式不断发起请求,十分费力不讨好,webSocket是将TCP请求伪装成HTPP请求的做法,保证服务端可以向客户端主动发送数据
cookie对于http协议的意义
- 对于服务器而言更像是让他有了记忆功能,不用每次请求都要去确认用户身份,带上cookie就可以让他知道此次用户是什么身份。诸如前端的seeion等浏览器存储是让方式更加多种多样,结果都是让服务器可以记住访问者的身份
http代理
http代理是对http请求扩展性强的一次很好的解释,是对http请求"请求-应答"模型的扩展,对于代理服务器,客户端视他为服务端,对于真实服务器而言,代理服务器则为客户端
- 代理流程
常规流程
优化http请求之客户端
- 已知数据大小
- zip压缩
- 一般前端的webpack都会对文本使用zip压缩,会有更好的效果,对音频,视频则效果不大
Response Headers:{
Content-Encoding:gizp
}
- 分块传输
- 数据过大,服务端采用分片传输,记录切片的数量以及切片索引,前端计算后传输给后端
Transfer-Encoding: chunked
http缓存加速
-
初次请求会耗时较久,当浏览器发现缓存中没有数据,会对服务器发起请求,如数据过时,或者设置的"max-age"到期,则重新发起请求,若缓存中已有数据,则不会额外发起请求减缓服务器压力
-
服务端可设置
max-age:no-store:不允许缓存,用于某些变化非常频繁的数据,例如秒杀页面;
max-age:no-cache:它的字面含义容易与 no-store 搞混,实际的意思并不是不允许缓存,而是可以缓存,但在使用之前必须要去服务器验证是否过期,是否有最新的版本;
max-age:must-revalidate:又是一个和 no-cache 相似的词,它的意思是如果缓存不过期就可以继续使用,但过期了如果还想用就必须去服务器验证。