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

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

一.简介

摘自百度百科:html

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

  • 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>app

  • 发送响应报文后,服务器进程通知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)

来自这里

相关文章
相关标签/搜索