http协议总览(前端建议收藏)

1,165 阅读3分钟

http解释

全称"超文本传输协议" ,解释如下

  • 超文本 指代text,video,image 等二进制文件
  • 传输 顾名思义用于传输数据
  • 协议 互联网中最基础的协议,是一切协议的基础,几乎都可以与其搭上关系

http协议的优缺点

  1. 明文, 即可感知的,整个传输对于客户端可见,对于开发者是优点,方便调试,诸如抓包以及谷歌的调试工具。对于黑客来说是优点,对于用户是缺点,诸如公共场合的黑wifi
  2. 无状态 即每次请求都要重新向服务器确认身份,本身是无感知的,直至后期加入了cookie,才有改善
  3. 扩展性强 由于http协议只是一个基础规范,所以很多协议可以在他的基础上添砖加瓦 ,本身http协议只是规定了 请求方式+header+body 大致框架

http的连接方式

http连接的发展历程以及原因

  1. 短连接(目前基本已基本为长连接)
  • 短连接每一次连接都需要经历TCP的三次握手,才能与服务器保持关联,而这种方式无疑加大了服务器的压力,每一次连接都是非常昂贵的
  1. 长连接
  • 长连接的原理是在例如nginx上,设置一个响应时间,在这个时间段服务器都会与客户端保持关联,不会像短链接一样请求一次就要经历TCP三次握手的过程,此操作大大减少了服务器的压力
  1. 双向通信webSocket

在没有出现webSocket之前,仅能使用轮询的方式不断发起请求,十分费力不讨好,webSocket是将TCP请求伪装成HTPP请求的做法,保证服务端可以向客户端主动发送数据

cookie对于http协议的意义

  • 对于服务器而言更像是让他有了记忆功能,不用每次请求都要去确认用户身份,带上cookie就可以让他知道此次用户是什么身份。诸如前端的seeion等浏览器存储是让方式更加多种多样,结果都是让服务器可以记住访问者的身份

http代理

http代理是对http请求扩展性强的一次很好的解释,是对http请求"请求-应答"模型的扩展,对于代理服务器,客户端视他为服务端,对于真实服务器而言,代理服务器则为客户端

  • 代理流程

avatar

常规流程

avatar

优化http请求之客户端

  • 已知数据大小
  1. zip压缩
  • 一般前端的webpack都会对文本使用zip压缩,会有更好的效果,对音频,视频则效果不大
	Response Headers:{
	 Content-Encoding:gizp
	}
  1. 分块传输
  • 数据过大,服务端采用分片传输,记录切片的数量以及切片索引,前端计算后传输给后端
	Transfer-Encoding: chunked

http缓存加速

  • 初次请求会耗时较久,当浏览器发现缓存中没有数据,会对服务器发起请求,如数据过时,或者设置的"max-age"到期,则重新发起请求,若缓存中已有数据,则不会额外发起请求减缓服务器压力

  • 服务端可设置

max-age:no-store:不允许缓存,用于某些变化非常频繁的数据,例如秒杀页面;
max-age:no-cache:它的字面含义容易与 no-store 搞混,实际的意思并不是不允许缓存,而是可以缓存,但在使用之前必须要去服务器验证是否过期,是否有最新的版本;
max-age:must-revalidate:又是一个和 no-cache 相似的词,它的意思是如果缓存不过期就可以继续使用,但过期了如果还想用就必须去服务器验证。