基础-http1.1如何优化


HTTP1.1如何优化

如何避免发送HTTP请求

  • 客户端会把第一次请求以及响应的数据保存在本地磁盘上,其中请求的URL作为key,响应作为value,形成映射。
  • 后续发起相同请求时,先冲本地磁盘查到对应的value,从本地读取
  • 服务器在发送HTTP响应时,会估算一个过期时间,并把这个信息放到响应头部中,这样客户端发现缓存过期是,就会重新发送网络请求
  • 如果过期了,客户端在重新发送请求时,在请求的Etag头部带上第一次请求响应的摘要,这个摘要唯一标识响应的资源,当服务器收到请求后,将本地摘要和请求摘要对比,如果相同,说明缓存可以继续使用,那么服务器返回不含body的 304 Not Modified 响应,告诉客户端资源仍然有效。

如何减少HTTP请求次数

减少重定向请求次数

  • 服务器上资源迁移后,服务器会返回302响应码和Location头部,告诉客户端该资源已经迁移至url2,于是客户端重新请求url2。
  • 服务端往往不止一层服务器,比如源服务器上一级是代理服务器,这时候需要两次全流程的请求和响应。代理服务器可以直接识别源服务器返回的状态码,自己发起重定向请求,省去客户端无感省去一次请求。
  • 301 Moved Permanently,资源永久重定向到另一个URL,告诉客户端将重定向响应缓存到本地,之后客户端自动用url2代替url1访问服务器资源

合并请求

  • HTTP1.1默认不使用管道模式,为了防止单个请求阻塞,一般浏览器会同时发起5-6个请求,每个请求都是不同的TCP连接
  • 将图片、图标合并成一个大图片;将js、css等资源打包成大文件;图片base64编码;都能减少HTTP请求次数

延迟发送请求

  • HTTP里有很多当前不需要的资源,可以通过按需获取的方式,减少http请求次数
  • 请求网页的时候,只获取用户看到的页面资源,当用户下滑页面的时候,再向服务器获取,懒加载

如何减少HTTP响应的数据大小

无损压缩

  • 针对代码进行压缩,去除机器执行时用不到的换行、空格等多余符号
  • 客户端支持的压缩算法,会在HTTP请求中通过头部Accept-Encoding告诉服务器
    • Accept-Encoding:gzip, deflate, br
  • 服务器收到后,会选择一个服务器支持货合适的压缩算法,通过头响应Content-Encoding告诉客户端该资源使用的压缩算法
    • Content-Encoding:gzip

有损压缩

有损压缩主要讲次要的数据舍弃,牺牲质量来减少数据量,提高压缩比,常用于多媒体如音频、视频、图片等

  • 可以通过HTTP请求头中Accept字段里q质量因子,告诉服务器期望的资源量
    • Accept:audio/*; q=0.2; autio/basic

  目录