zoukankan      html  css  js  c++  java
  • HTTP的发展历程

    1.HTTP0.9

    超文本传输协议:传输内容较单一

    1.只有一个请求行,没有请求头和请求体

    2.响应数据没有头信息

    3.响应数据以ASCII码的形式传输

    4.只能发送get这样的简单请求

    2.HTTP1.0

    解决问题:随着传输数据类型的多样化,客户端和服务器都需要给对方传达更多信息

    方法:

    1.引入请求头和响应头

    请求头中包含的信息有:文件类型accept、文件压缩方式accept-encoding、文件的编码类型accept-Charset、所需的文件语言类型accept-language

    响应头中包含的信息有:文件最终压缩方式content-encoding、文件类型content-type

    2.引入状态码

    3.引入catch机制,对数据进行缓存

    4.请求头中添加用户代理字段

    3.HTTP1.1

    解决问题:

    1.多次tcp连接浪费时间和资源

    2.队头阻塞

    3.虚拟服务器问题

    4.内容动态生成导致无法确定传输文件大小

    方法:

    1.持久连接:在一个TCP连接上可以传输多个HTTP请求。

    默认Connection为keep-alive状态。目前浏览器中对于同一域名,默认允许同时建立6个TCP持久连接。

    2.管线化:试图解决队头阻塞问题,将请求整批发送给服务器

    3.提供虚拟机支持,请求头中增加host字段

    4.支持动态内容:使用chunk transfer解决文件大小不固定的情况

    5.客户端cookie和安全机制

    4.HTTP2

    要解决的问题:

    1.HTTP1.1中同一域名可连通多个TCP连接,各个TCP之间将会竞争带宽,导致传输受阻。并且由于TCP的慢启动,在文件较小的情况下传输情况受限。

    因此,在HTTP2中限制一个域名使用一个TCP长连接,减少带宽的竞争和慢启动。

    2.队头阻塞问题

    方法:

    http2的优化策略都是在二进制分帧的基础上得到的。

    1.二进制分帧:添加二进制分帧层,将数据包分成更小的数据帧进行传输

    2.多路复用机制

    3.设置请求优先级

    4.服务器推送

    5.头部压缩

  • 相关阅读:
    从‘void*’到‘int’的转换损失精度
    ../lib//libscsdblog.so: undefined reference to `pthread_atfork'
    使用Crypto++库的CBC模式实现加密
    VIM常用命令
    mysql bin-log三种模式
    windows64位Oracle安装和PL/SQL配置
    Maven项目中突然找不到Build Path或maven dependencies library
    org.springframework.beans.factory.config.MethodInvokingFactoryBean的使用
    使用Spring的StingUtils的commaDelimitedListToStringArray来获取字符串数组
    Spring注入
  • 原文地址:https://www.cnblogs.com/cff2121/p/13369785.html
Copyright © 2011-2022 走看看