HTTP协议以及HTTP2.0/1.1/1.0区别

一.简介

摘自百度百科:

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

  • HTTP属于OSI网络七层协议模型中的"最上层":应用层。由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
  • HTTP默认端口号为80。它也可以承载在TLS和SSL之上,通过加密、认证的方式实现数据传输的安全,称为HTTPS,HTTPS默认端口号为443。
  • 早期HTTP用于传输网页HTML文件,发展到现在,应用变得广泛,客户端软件(PC,Android,iOS等)大部分通过HTTP传输数据。

二.通信过程

角色:客户端和服务端

  • 首先,客户端发起一个与服务器的TCP连接,建立连接之后,A中的浏览器进程就可以通过Socket访问该TCP连接。

  • 客户端A进程通过该TCP连接向服务端B发送一个HTTP请求报文(ASCII码),报文中包含(百度首页为例)

    请求行(request line) : 3个字段:方法字段、URL字段和HTTP版本字段
    GET / HTTP/1.1

    请求头(header line) : 位于请求行之后

    Host www.baidu.com
    Connection keep-alive

    Cache-Control max-age=0

    Upgrade-Insecure-Requests 1

    User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

    Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8

    Referer https://www.baidu.com/s?wd=Https&rsv_spt=1&rsv_iqid=0xc28e80ff00002ae1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&oq=Http%25E5%258D%258F%25E8%25AE%25AE&rsv_pq=de652d0900004bfb&inputT=691&rsv_sug3=47&rsv_sug1=48&rsv_sug7=100&rsv_sug4=756

    Accept-Encoding gzip, deflate, br

    Accept-Language zh-CN,zh;q=0.9,en;q=0.8

    空行 :
    位于请求头和请求体之间,必须要有

    请求体(entity body) : 在使用GET方法时,请求体为空。POST时可以类似如下格式:

    username=test&password=123123

  • HTTP服务器进程通过Socket接收到该请求报文,从存储器(内存或磁盘)中得到URL字段中指定的对象(如:/index.html),然后封装到响应报文中,通过Socket发送到客户端。

    响应报文:

    状态行(status line) :

    HTTP/1.1 200 OK

    响应头(header line):

    Cache-Control: private

    Connection: Keep-alive

    Content-Encoding: gzip

    Content-Type: text/html;charset=utf-8

    Date: Thu, 29 Mar 2018 16:01:47 GMT

    Expires: Thu, 29 Mar 2018 16:01:46 GMT

    Set-Cookie: BD_HOME=1; path=/

    空行:

    响应体(entity body):

    <html>...</html>

  • 发送响应报文后,服务器进程通知TCP断开TCP连接(只是通知,此时TCP连接不一定关闭),TCP发送完数据后,实际断开该连接。
  • 客户端收到响应报文后,将响应实体中的文件信息提取出来,用浏览器引擎绘制或者通过别的进程处理该数据。

实际中,可能一个HTML中有许多资源引用(如CSS文件,图片,JS文件等),对于每一个引用对象,重复该过程(HTTP1.0短连接)

三.HTTP1.0/1.1/2.0区别

  • HTTP1.1默认使用长连接,可有效减少TCP的三次握手开销。
  • HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。
  • HTTP1.0是没有host域的,HTTP1.1才支持这个参数。
  • HTTP2.0使用多路复用技术(Multiplexing),多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
    "HTTP1.1在同一时间对于同一个域名的请求数量有限制,超过限制就会阻塞请求"。多路复用底层采用"增加二进制分帧层"的方法,使得不改变原来的语义、首部字段的情况下提高传输性能,降低延迟。
    二进制分帧将所有传输信息分割为更小的帧,用二进制进行编码,多个请求都在同一个TCP连接上完成,可以承载任意数量的双向数据流。HTTP/2更有效的使用TCP连接,得到性能上的提升。


    网上不错的一个过程图片:

  • HTTP/2新增首部压缩(Header Compression):采用HPACK算法
  • HTTP/2新增服务端推送(Header Compression)

来自这里

HTTP协议以及HTTP2.0/1.1/1.0区别的更多相关文章

  1. http2.0与http1.X的区别

    此文只是方便重看,原文在:http://www.mamicode.com/info-detail-1199706.html 1.1 HTTP应用场景 http诞生之初主要是应用于web端内容获取,那时 ...

  2. HTTP协议详解及http1.0与http1.1http2.0的区别

    HTTP协议介绍 http(超文本传输协议)是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.特点: (1)支持客户/服务器模式. HTTP是一个客户端和服务器端请 ...

  3. C# HTTP1.0 1.1 2.0与HTTPS 、TCP/IP协议的UDP与TCP、 Socket介绍与WebSocket

    一.HTTP1.0 1.1 2.0和HTTPS 1.HTTP协议是什么? HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol.它是从WEB服务器传输超文 ...

  4. 禁用SSL v2.0、SSL v3.0协议

    1.禁用SSL v2.0.SSL v3.0协议,禁用低强度加密密钥.使用TLS 1 TLSv1.1 TLSv1.2版本.2.禁用SSLv2参考修补方法如下:查看本机sslv3加密列表:openssl ...

  5. Aurora 8B/10B、PCIe 2.0、SRIO 2.0三种协议比较

    在高性能雷达信号处理机研制中,高速串行总线正逐步取代并行总线.业界广泛使用的Xilinx公司Virtex-6系列FPGA支持多种高速串行通信协议,本文针对其中较为常用的Aurora 8B/10B和PC ...

  6. http协议以及http1.0和http1.1的区别

    header响应头信息: HTTP/1.1 302 FOUND Content-Length: 0 Set-Cookie: sessionid=n3gozvqbjba1zckr7v0ccj6yn7v9 ...

  7. TLS/SSL 协议详解 ssL 、TLS 1.0、TLS 1.1、TLS 1.2的了解

    TLS 1.0 RFC http://www.ietf.org/rfc/rfc2246.txt TLS 1.1 RFC http://www.ietf.org/rfc/rfc4346.txt TLS ...

  8. http1.0 1.1 2.0区别

    http1.0 1.1 2.0区别 转载:https://blog.csdn.net/linsongbin1/article/details/54980801/ 1.HTTP1.0 1.1区别 (1) ...

  9. HTTP1.0,1.1,2.0,HTTPS

    HTTP1.0/1.1/2.0/HTTPS HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接收HTML页 ...

随机推荐

  1. 新的一年新的变化!IT的大变天

    今天是一个特别的日子,祝女神朋友们,节日快乐,早点下班! 新的一年,大家又忙碌在加班加点的堆代码中,bug的陪伴使我快乐使我忧伤,想想想,也奋斗了五六百的岁月,实习期向往大城市的公司,梦想着有一天与自 ...

  2. 【BZOJ4556】字符串(后缀数组,主席树)

    [BZOJ4556]字符串(后缀数组,主席树) 题面 BZOJ 题解 注意看题: 要求的是\([a,b]\)的子串和[c,d]的\(lcp\)的最大值 先来一下暴力吧 求出\(SA\)之后 暴力枚举\ ...

  3. 【HNOI 2002 】营业额统计(splay)

    题面 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营 ...

  4. UOJ207:共价大爷游长沙

    题面 UOJ Sol 神题 给每个点对随机一个权值,把这两个点的权值异或上这个随机的值 用\(LCT\)维护子树信息,若子树异或和为所有点对的异或和那么就是答案 大常数代码 # include < ...

  5. 关系型数据库工作原理-归并排序(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

  6. Mysql 忘记管理员密码更改

    对管理员设置密码 第一种方式: #mysqladmin -u root password 'new-password'; #mysqladmin -u root -h localhost passwo ...

  7. openssh/openssl升级到7.4和1.0.2j 源码方式

    #!/bin/bashtar -xvf openssh-7.4p1.tar.gztar -xvf openssl-1.0.2j.tar.gz 升级 openssl 到1.0.2jcd openssl- ...

  8. angular路由详解三(路由参数传递)

    我们经常用路由传递参数,路由主要有三种方式: 第一种:在查询参数中传递数据 {path:"address/:id"}   => address/1  => Activa ...

  9. java 开发 face++ 人脸特征识别系统

    首先要在 face++ 注册一个账号,并且创建一个应用,拿到 api key 和 api secret: 下载 java 接入工具,一个 jar 包:https://github.com/FacePl ...

  10. GeoJSON C#判断某一点是否在某一区域范围之内

    GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式.GeoJSON对象可以表示几何.特征或者特征集合.GeoJSON支持下面几何类型:点 ...