• HTTP0.9、HTTP1.0、HTTP1.1、HTTP2的区别


    HTTP0.9(1991)

    该版本极其简单,只有一个命令 GET

    GET /index.html

    上面命令表示,TCP 连接(connection)建立后,客户端向服务器请求(request)网页index.html。

    协议规定,服务器只能回应 HTML 格式的字符串,不能回应别的格式。

    <html>
           <body>Hello World</body>
    </html>
    

    服务器发送完毕,就关闭 TCP 连接


    HTTP1.0(1996)

    任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。这为互联网的大发展奠定了基础

    每次通信都必须包括头信息(HTTP header),用来描述一些元数据

    除了 GET 命令,还引入了 POST 命令和 HEAD 命令,丰富了浏览器与服务器的互动手段

    其他的新增功能还包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等


    HTTP/1.0 版的主要缺点是,每个 TCP 连接只能发送一个请求。

    发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。

    TCP 连接的新建成本很高,因为需要客户端和服务器三次握手,并且开始时发送速率较慢(slow start)。

    所以,HTTP 1.0 版本的性能比较差。


    HTTP/1.1(1997)

    1、引入了持久连接(persistent connection),即 TCP 连接默认不关闭,可以被多个请求复用,不用声明 Connection: keep-alive。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送 Connection: close,明确要求服务器关闭 TCP 连接

    2、引入了管道机制(pipelining),即在同一个 TCP 连接里面,客户端可以同时发送多个请求。这样就进一步改进了 HTTP 协议的效率。

    举例来说,客户端需要请求两个资源。以前的做法是,在同一个 TCP 连接里面,先发送A请求,然后等待服务器做出回应,收到后再发出B请求。

    管道机制则是允许浏览器同时发出 A 请求和 B 请求,但是服务器还是按照顺序,先回应 A 请求,完成后再回应 B 请求。

    3、将 Content-length 字段的作用进行扩充,即声明本次回应的数据长度(一个 TCP 连接现在可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的)

    4、采用分块传输编码,对于一些很耗时的动态操作,服务器需要等到所有操作完成,才能发送数据,显然这样的效率不高。更好的处理方法是,产生一块数据,就发送一块,采用"流模式"(stream)取代"缓存模式"(buffer)

    5、1.1 版还新增了许多动词方法:PUT、PATCH、HEAD、 OPTIONS、DELETE。

    另外,客户端请求的头信息新增了Host字段,用来指定服务器的域名

    [不足]
    虽然 1.1 版允许复用 TCP 连接,但是同一个 TCP 连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为"队头堵塞"(Head-of-line blocking)。

    为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。

    这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。如果 HTTP 协议设计得更好一些,这些额外的工作是可以避免的。


    HTTP/2.0(2015)

    简单来说,HTTP/2(超文本传输协议第2版,最初命名为HTTP2.0),是 HTTP 协议的第二个主要版本。

    HTTP/2 是HTTP协议自 1999 年 HTTP1.1 发布后的首个更新,主要基于 SPDY 协议。
    HTTP2.0 的特点是:在不改动 HTTP 语义、方法、状态码、URI 及首部字段的情况下,大幅度提高了 web 性能。

    什么是SPDY协议

    刚刚对HTTP2.0的介绍中引出了一个名词 —— SPDY协议,这又是什么呢?

    SPDY 是 Speedy 的昵音,意为“更快”。

    它是 Google 开发的基于 TCP 协议的应用层协议。

    目标是优化 HTTP 协议的性能,通过压缩、多路复用和优先级等技术,缩短网页的加载时间并提高安全性。

    SPDY 协议的核心思想是尽量减少 TCP 连接数。

    SPDY 并不是一种用于替代 HTTP 的协议,而是对 HTTP 协议的增强。

  • 相关阅读:
    How to tell your iPhone application that location services are required | The Agile Warrior
    How to detect whether socket is still connected...
    Ubuntu Touch On Nexus4 Manual Install (手动安装) under Gentoo
    LanguageTag
    » Working Around JNI UTF-8 Strings Deprogramming
    Mget is available.
    Fix Valgrind's must-be-redirected error in Gentoo
    vector 测试
    abc
    Effective STL 43: Prefer algorithm calls to hand-written loops
  • 原文地址:https://www.cnblogs.com/kai-/p/12655493.html
Copyright © 2020-2023  润新知