【计算机网络】HTTP——基于HTTP的功能追加协议(个人笔记)

学习日期:2024.6.29

内容摘要:基于HTTP的功能追加协议和HTTP/2.0


HTTP的瓶颈与各功能追加协议

需求的产生

在Facebook、推特、微博等平台,每分每秒都会有人更新内容,我们作为用户当然希望时刻都能收到最新的消息,为了尽可能实时的显示最新的内容,服务器上一有消息更新,就需要同步到客户端上。这看起来不是狠复杂,但HTTP并不能很好的完成这一任务。

因为HTTP有以下标准,导致其难以满足我们的需求:

①一条连接上只能发送一个请求。

②请求只能从客户端开始,客户端不能接受除响应以外的任何指令。

③请求/响应首部未经压缩就会发送,首部信息发送越多延迟越大。

Ajax的解决方法

Ajax(Asynchronous Javascript and XML,异步Javascript和XML技术,[eɪˈsɪŋkrənəs] adj.异步的;不同时的)

Ajax的核心技术是名为XMLHttpRequest的API,可以达到局部页面替换加载的作用,借由这种手段,可以从已经加载完毕的Web页面上发起请求,然后只更新局部页面,从而减少响应中传输的数据,加快速度。

但使用Ajax实时从服务器获取内容,依然没有解决请求只能从客户端发送的问题,在服务器没有更新时,可能会导致大量徒劳的请求产生。

Comet的解决方法

一旦服务器端有内容更新,Comet方法能立刻向客户端返回响应。这是一种通过延迟应答来模拟服务器端向客户端推送的功能。

Comet方法在收到请求时,不会在处理完成后立刻返回响应,而是先挂起,当服务器端有内容更新时再返回响应,以此达到一种伪主动发送更新的功能。

此方法内容是虽然可以实现实时更新,但是为了保留响应,一次连接的持续时间也变长了,为了维持连接会消耗更多的资源。另外Comet也未能解决HTTP协议本身存在的问题。

SPDY

SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新增SPDY会话层的方式解决问题,同时考虑到安全性问题,SPDY规定通信中采用SSL,以下为示意图

HTTP应用层
SPDY会话层
SSL表示层
TCP传输层

 在使用SPDY后,HTTP获得以下功能:

1. 多路复用 请求优化

通过单一的TCP连接,可以无限制处理多个HTTP请求,所有请求的处理都在一条TCP连接上完成,处理的效率得到了提高。同时SPDY可以给各个请求分配优先级顺序,主要是针对在发送多个请求时,针对带宽低导致的响应速度变慢的问题。

 

2. 支持服务器推送技术

服务器可以主动向客户端发起通信向客户端推送数据,这样服务器在更新时可以主动发送数据,不必等待客户端的请求。

3. SPDY 压缩了 HTTP 头

舍弃掉了不必要的头信息,经过压缩之后可以节省多余数据传输所带来的等待时间和带宽。

4. 强制使用 SSL 传输协议

Google 认为 Web 未来的发展方向必定是安全的网络连接,全部请求 SSL 加密后,信息传输更加安全。

5. 服务器提示功能

服务器可以主动提示客户端所需的资源,由于在客户端发现资源之前就可以得知资源的存在,因此在资源已经缓存的情况下,无需发送不必要的请求。

HTTP/2.0

HTTP/2.0牛逼在哪?

HTTP/2.0是HTTP1.1基础上的改进,利用了SPDY和HTTP Speed+ Friendly等协议,解决并发传输、服务器推送、头部压缩这几个HTTP1.1中的难题

头部压缩

HTTP的报文是由头部和主体部分组成的,HTTP/1.1只能压缩报文主体部分,不能压缩头部。但头部,特别是带有Cookie的头部,大小并不算小,也需要压缩。

HTTP/2 没使用常见的 gzip 压缩方式来压缩头部,而是开发了 HPACK 算法,HPACK 算法主要包含三个组成部分:

  • 静态字典;
  • 动态字典;
  • Huffman 编码(压缩算法);

客户端和服务器两端都会建立和维护「字典」,用长度较小的索引号表示重复的字符串,再用 Huffman 编码压缩数据,可达到 50%~90% 的高压缩率

并发传输

HTTP2引入了Stream ,通过这个设计,多个 Stream 复用一条 TCP 连接,达到并发的效果,解决了 HTTP/1.1 队头阻塞的问题,提高了 HTTP 传输的吞吐量。

为了理解 HTTP/2 的并发是怎样实现的,我们先来理解 HTTP/2 中的 Stream、Message、Frame 这 3 个概念。

你可以从上图中看到:

①1 个 TCP 连接包含一个或者多个 Stream,Stream 是 HTTP/2 并发的关键技术;

②Stream 里可以包含 1 个或多个 Message,Message 对应 HTTP/1 中的请求或响应,由 HTTP 头部和包体构成;

③Message 里包含一条或者多个 Frame,Frame 是 HTTP/2 最小单位,以二进制压缩格式存放 HTTP/1 中的内容(头部和主体);

因此,我们可以得出结论:多个 Stream 跑在一条 TCP 连接,同一个 HTTP 请求与响应是跑在同一个 Stream 中,HTTP 消息可以由多个 Frame 构成, 一个 Frame 可以由多个 TCP 报文构成。

在 HTTP/2 连接上,不同 Stream 的帧是可以乱序发送的(因此可以并发不同的 Stream ),因为每个帧的头部会携带 Stream ID 信息,所以接收端可以通过 Stream ID 有序组装成 HTTP 消息,而同一 Stream 内部的帧必须是严格有序的

举个例子就是说,TCP连接就像是一个轨道,不同的Stream就是开过去不同颜色的火车,可以是先开红色的火车过去,再开绿色的火车过去(并发发送),但是到站的顺序,每种颜色的车辆一定是按顺序到站的。即(红1,绿1,蓝1,绿2,蓝2,红2...)

服务器推送

客户端和服务器双方都可以建立 Stream,因为服务端可以主动推送资源给客户端, 客户端建立的 Stream 必须是奇数号,而服务器建立的 Stream 必须是偶数号。

比如下图,Stream 1 是客户端向服务端请求的资源,属于客户端建立的 Stream,所以该 Stream 的 ID 是奇数(数字 1);Stream 2 和 4 都是服务端主动向客户端推送的资源,属于服务端建立的 Stream,所以这两个 Stream 的 ID 是偶数(数字 2 和 4)。


 内容总结自人民邮电出版社《图解HTTP》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第188题买卖股票的最佳时机IV

题目: 题解: class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:if not prices:return 0n len(prices)k min(k, n // 2)buy [0] * (k 1)sell [0] * (k 1)buy[0], sell[0] -prices[0], 0for i in range(1, k 1):buy[i] …

尚硅谷vue2的todolist案例解析,基本概括了vue2所有知识点,结尾有具体代码,复制粘贴学习即可

脚手架搭建 1-初始化脚手架(全局安装) npm install -g vue/cli2-切换到创建项目的空目录下 vue create xxxx整体结构 整体思路 App定义所有回调方法 增删改查 还有统一存放最终数据,所有子组件不拿数据,由App下发数据&#xf…

App托管服务分发平台 index-uplog.php 文件上传致RCE漏洞复现

0x01 产品简介 App托管服务分发平台是一个为开发者提供全面、高效、安全的应用程序托管、分发和推广服务的平台。开发者可以将自己开发的应用程序上传到平台上,平台会对上传的应用程序进行审核,确保应用的质量和安全性。平台会根据开发者的要求,将应用分发到不同的应用市场…

5G RAN

两个entity:NodeB、UE entity之间传输数据的东东 entity内部的流水线岗位:L3/L2/L1 岗位之间是消息交互/信令交互

利用labelme制作自己的coco数据集(labelme转coco数据集)

最近刚接触学习mmdetection,需要用到coco格式的数据集。 1.安装labelme 建议在conda(base)环境下安装(前提是需要下载anaconda),下面是我已经装过的情况。 2.进入labelme环境下 中间可能会提示安装其它库,自行装上就行。 这里的…

智能社区服务小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,房屋信息管理,住户信息管理,家政服务管理,家政预约管理,报修信息管理 微信端账号功能包括:系统首页,房屋信…

Flood Fill——AcWing 1097. 池塘计数

Flood Fill 定义 Flood Fill算法,又称为洪水填充或种子填充算法,是一种在图或网格数据结构中探索连通区域的搜索算法。它从一个初始节点(种子点)开始,将具有相同属性(如颜色、值等)的相邻节点…

P4. 微服务: 匹配系统(下)

P4. 微服务: 匹配系统 下 0 概述1 游戏同步系统1.1 游戏同步的设计1.2 游戏同步的实现 2 匹配系统微服务的实现2.1 微服务概述2.2 匹配系统接口url的实现2.3 微服务之间的通信2.4 匹配逻辑的实现2.5 匹配系统的权限控制 3 bug的解决3.1 自己匹配自己3.2 断开连接问题 0 概述 本…

大数据之Linux部署常用命令脚本封装

文章目录 编写集群命令执行脚本xcall集群命令执行1. 脚本需求2. 需求分析3. 脚本实现3.1 创建脚本存放目录3.2 编写xcall脚本3.3 修改脚本执行权限3.4 测试脚本 编写集群分发脚本xsync集群分发脚本1. 脚本需求2. 需求分析3. 脚本实现3.1 创建脚本存放目录3.2 编写xsync脚本3.3 …

计算机毕业设计PyFlink+Spark+Hive民宿推荐系统 酒店推荐系统 民宿酒店数据分析可视化大屏 民宿爬虫 民宿大数据 知识图谱 机器学习

本科毕业设计(论文) 开题报告 学院 : 计算机学院 课题名称 : 民宿数据可视化分析系统的设计与实现 姓名 : 庄贵远 学号 : 2020135232 专业 : 数据科学与大数据技术 班级 : 20大数据本科2…

重温react-06(初识函数组件和快速生成格式的插件使用方式)

开始 函数组件必然成为未来发展的趋势(个人见解),总之努力的去学习,才能赚更多的钱.加油呀! 函数组件的格式 import React from reactexport default function LearnFunction01() {return (<div>LearnFunction01</div>) }以上是函数式组件的组基本的方式 快捷生…

基于DSMM数据安全能力建设方案的落地性评估指标

写在前面&#xff1a; 随着信息技术的迅猛发展&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;数据安全问题也随之而来&#xff0c;如何确保数据的安全性、完整性和可用性&#xff0c;已成为企业面临的重要挑战。DSMM&#xff08;数据安全能力成熟度模型&#x…

混合专家模型(MoE)的前世今生

在文章《聊聊最近很火的混合专家模型&#xff08;MoE&#xff09;》中&#xff0c;我们简单介绍了MoE模型的定义和设计&#xff0c;并且比较了MoE和Dense模型的区别&#xff0c;今天我们继续来回顾一下MoE模型发展的历史和最新的发展现状。 从去年GPT-4发布至今&#xff0c;MoE…

[C++][设计模式][中介者模式]详细讲解

目录 1.动机2.模式定义3.要点总结 1.动机 在软件构建过程中&#xff0c;经常会出现多个对象相互关联的情况&#xff0c;对象之间常常会维持一种复杂的引用关系&#xff0c;如果遇到一些需求的更改&#xff0c;这种直接的引用关系将面临不断的变化在这种情况下&#xff0c;可以…

SpringDataJPA系列(2)Commons核心Repository

SpringDataJPA系列(2)Commons核心Repository Spring Data Commons依赖关系 我们通过 Gradle 看一下项目依赖&#xff0c;了解一下 Spring Data Common 的依赖关系 通过上图的项目依赖&#xff0c;不难发现&#xff0c;数据库连接用的是 JDBC&#xff0c;连接池用的是 HikariC…

使用label-studio对OCR数据进行预标注

导读 label-studio作为一款数据标注工具相信大家都不陌生&#xff0c;对于需要进行web数据标注协同来说应该是必备工具了&#xff0c;标注的数据类型很全涉及AI的各个任务(图像、语音、NLP、视频等)&#xff0c;还支持自定义涉及模版。 然而&#xff0c;我们在标注数据的过程…

Veno File Manager(VFM)v4.2.7 中文包整理

Veno File Manager&#xff08;VFM&#xff09;是一个简单灵活的即插即用文件管理器&#xff0c;易于使用且具有许多选项。将文件发送给您的客户&#xff0c;使用专用文件夹创建新用户&#xff0c;或仅用作您的个人文件云。从任何设备访问&#xff0c;用户管理和从直观的管理面…

OpenCV 调用自定义训练的 YOLO-V8 Onnx 模型

一、YOLO-V8 转 Onnx 在本专栏的前面几篇文章中&#xff0c;我们使用 ultralytics 公司开源发布的 YOLO-V8 模型&#xff0c;分别 Fine-Tuning 实验了 目标检测、关键点检测、分类 任务&#xff0c;实验后发现效果都非常的不错&#xff0c;但是前面的演示都是基于 ultralytics…

C语言分支和循环(下)

C语言分支和循环&#xff08;下&#xff09; 1. 随机数生成1.1 rand1.2 srand1.3 time1.4 设置随机数的范围 2. 猜数字游戏实现 掌握了前面学习的这些知识&#xff0c;我们就可以写⼀些稍微有趣的代码了&#xff0c;比如&#xff1a; 写⼀个猜数字游戏 游戏要求&#xff1a; 电…

第6章 复制

文章目录 前言1.配置1.1建立复制1.2断开复制1.3 安全性1.4 只读1.5 传输延迟 2. 拓扑2.1.一主一从结构2.2.一主多从结构2.3.树状主从结构 3.原理3.1复制过程3.2数据同步3.3全量复制 前言 复制功能&#xff0c;实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础&…