• http基础


    http 版本号
    HTTP/1.0 1996 年版本发布
            为了提高系统的效率,http1.0 协议规定浏览器与服务器只保持短暂连接,请求结束就断开连接这虽然减少了空连接的资源占用,但是增加了连接次数,连接的复用性降低,每次有新的请求就要重新建立一次连接
            TCP连接的建立和断开需要三次握手、四次挥手,是一个很耗费时间的过程,每个连接又只能解决一次请求的通信,所以效率十分低下。
    HTTP/1.1 1999 年诞生
            在http1.0 基础上默认开启了 keepalive (长链接),客户端和服务器之间建立的连接可以复用,默认请求结束后保持连接一段时间,在这一段时间,对方都没有新的请求,就可以主动断开连接,或者客户端在最后一个请求时,主动告诉服务端要断开连接。大大节省了TCP 连接频繁建立和断开的开销
            与http1.0 相比,增加了管道机制,即在同一个 TCP 连接中,客户端可以同时发送多个请求,但是服务端还是按序响应,并没有完全解决“ 队头阻塞 ,依然是串行(客户端在收到前边请求的响应前,后边的请求都要堵塞等待响应,客户端收到响应也不递送)
            在http1.0 的基础上,还添加了 Host 字段,这样就可以请求同一服务器的不同站点;增加了缓存机制、扩展了错误状态码、请求范围引入了range .
    HTTP/2.0 1999 年的首个更新
            http1.1采用了长连接和管道技术,大大提高了效率,但是服务端还是按序响应,效率还是十分低下
            为了解决1.1 中存在的效率问题, http2.0 采用了多路复用,客户端和浏览器都可以同时发送多个请求或响应,并且不用按照顺序一一对应,这是因为http2 进行了二进制分帧(应用层和传输层之间的二进制分帧层),将传输信息分为更小的多个不同类型的帧,并进行标记,确保请求和响应的有序重组
            相比http1.1 ,还做了 header 压缩,和服务端推送(预先把一些热点等推送到缓存)
    HTTP1.0 1.1 区别
    长连接 (Persistent Connection)
            HTTP1.1支持长连接和请求的流水线处理,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1 中默认开启长连接 keep-alive ,一定程度上弥补了HTTP1.0 每次请求都要创建连接的缺点。 HTTP1.0 需要使用 keep-alive 参数来告知服务器端要建立一个长连接。
    节约带宽
            HTTP1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能。HTTP1.1 支持只发送 header 信息(不带任何body 信息),如果服务器认为客户端有权限请求服务器,则返回 100 ,客户端接收到 100才开始把请求body 发送到服务器;如果返回 401 ,客户端就可以不用发送请求 body 了节约了带宽。
    HOST
            在HTTP1.0 中认为每台服务器都绑定一个唯一的 IP 地址,因此,请求消息中的 URL 并没有传递主机名hostname HTTP1.0 没有 host 域。随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers ),并且它们共享一个 IP 地址。 HTTP1.1的请求消息和响应消息都支持host 域,且请求消息中如果没有 host 域会报告一个错误( 400
    Bad Request )。
    缓存处理
            在HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,
    HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag If-Unmodified-Since, If-Match, If
    None-Match 等更多可供选择的缓存头来控制缓存策略。
    错误通知的管理
    HTTP1.1 中新增了 24 个错误状态响应码,如 409 Conflict )表示请求的资源与资源的当前
    状态发生冲突; 410 Gone )表示服务器上的某个资源被永久性的删除。

     HTTP1.12.0区别

    多路复用
            HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1 大了好几个数量级。 HTTP1.1 也可以多建立几个 TCP 连接,来支持处理更多并发的请求,但是创建TCP 连接本身也是有开销的。
    头部数据压缩
            在HTTP1.1 中, HTTP 请求和响应都是由状态行、请求 / 响应头部、消息主体三部分组成。一般而言,消息主体都会经过gzip 压缩,或者本身传输的就是压缩过后的二进制文件,但状态行和头部却没有经过任何压缩,直接以纯文本传输。随着Web 功能越来越复杂,每个页面产生请求数也越来越多,导致消耗在头部的流量越来越多,尤其是每次都要传输UserAgent 、Cookie这类不会频繁变动的内容,完全是一种浪费。
            HTTP1.1不支持 header 数据的压缩, HTTP2.0 使用 HPACK 算法对 header 的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
    服务器推送
            服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML 、样式表、脚本、图片等等。在HTTP1.1 中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML 开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。
            为了改善延迟,HTTP2.0 引入了 server push ,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
  • 相关阅读:
    filebeat新filestream类型是否支持tail_files类似功能探究
    现代前端常用工具
    spring boot 自定义 starter
    python 笔记
    【ES6 新特性】
    基于javaweb+mysql数据库实现的学生选课管理系统项目源代码
    C++ 语法基础课 习题3 —— 循环结构
    第13章 平面图
    用python画一些有趣的图案(001)
    为什么我学了几天 STM32 感觉一脸茫然?
  • 原文地址:https://blog.csdn.net/m0_56627229/article/details/127928674