当前位置: 首页 > news >正文

[Cloud Networking] SPDY 协议

文章目录

  • 1. 背景
  • 2. SPDY 之前
  • 3. SPDY 项目目标
  • 4. SPDY 功能特点
    • 4.1 SPDY基本功能
    • 4.2 SPDY高级功能

1. 背景

TCP是通用的、可靠的传输协议,提供保证交付、重复抑制、按顺序交付、流量控制、拥塞避免和其他传输特性。
HTTP是提供基本请求/响应语义的应用层协议。

不幸的是,HTTP并不是特别为延迟设计的。比如我们要访问一个网站,当我们浏览器输入网址例如 www.baidu.com 回车之后,浏览器需要请求多个资源,然后再渲染展示。

HTTP要求每个资源就要创建一个HTTP请求,即使使用HTTP管道,仍然需要按照FIFO队列来执行,服务器延迟又阻止了TCP通道的请求重用。最终只能让浏览器通过使用多个连接来解决这个问题。最开始浏览器默认每个域2个连接,后来扩展到6个连接。

在HTTP中,只有客户端可以发起请求,即使服务器知道客户端需要某个资源,它也没有机制通知客户端,必须等待从客户端接收到资源的请求。

此外,HTTP header大小逐渐变大, HTTP header 大小从200字节到2KB不等,随着应用程序使用更多的cookie和代理扩展功能,700-800字节的header大小越来越常见。减少header可以直接改善发送请求的序列化延迟,同时例如 User-Agent \ Host \ Accept 等静态头部其实并不需要在同一通道上反复发送。

此外TCP 的head of line blocking问题,TCP要求数据接收必须是有序的,中间的一次失败就会阻塞后面所有的数据包接收。

基于以上问题,Google开发SPDY协议,旨在通过减少网络延迟来提高Web页面的加载速度。它是一种基于TCP应用层协议,旨在优化HTTP协议的性能

SPDY的主要特点包括

  1. 多路复用:允许在一个SPDY连接内有无限个并行请求,这样可以共享一个TCP会话进行多个HTTP请求,从而减少消息交互往返的时间和延迟。
  2. 请求优先级:可以设置优先级,选择性地传输更重要的资源,如CSS和JavaScript,然后是其他资源。
  3. HTTP头部压缩:删除不必要的头信息,通过压缩减少数据传输所带来的等待时间和带宽。
  4. 服务器推送技术:服务器可以主动向客户端发送数据,这种预加载可以使用户一直保持一个快速的网络。

SPDY协议不是用于替代HTTP的协议,而是对HTTP协议的增强。它通过实现多路复用、请求优先级、头部压缩和服务器推送等功能,提高了网页加载速度,同时也减少了延迟。

随着时间的推移,SPDY协议已经成为了HTTP/2的基础,并在多个浏览器和服务器上得到了广泛支持。

2. SPDY 之前

在SPDY协议之前,还有其他协议来解决网络延迟,只是他们大多处在传输层或会话层:

  1. Stream Control Transmission Protocol(SCTP) 用于替代TCP的传输层协议,提供多路复用流和流意识的拥塞控制。
  2. HTTP over SCTP:一种让HTTP在SCTP上运行的协议
  3. Structured Stream Transport (SST),一种创建“结构化流”的协议,是一种清凉、独立的用于在普通传输层上运行的协议。可以替代TCP或者运行在UDP上。
  4. MUX/SMUX,结余传输层和应用层之间的协议,它提供了流的多路复用。

这些都提供了解决一些互联网延迟问题的方法,但由于HTTP中的问题(压缩、优先级等)仍然需要解决,这与底层的传输层协议无关。从实际上讲,改变传输层是非常难以部署的。

3. SPDY 项目目标

SPDY项目定义并实现了一个应用层协议,用于大幅度减少网络的延迟。SPDY的High Level 目标包括:

  1. 目标是减少50%的页面加载时间。
  2. 最小化部署复杂性。SPDY使用TCP作为底层传输层,因此不需要对现有网络基础设施进行任何更改。
  3. 避免需要网站作者对内容进行任何更改。支持SPDY所需的唯一更改是在客户端用户代理和Web服务器应用程序中。
    4,. 聚集志同道合的团体,期望与开源社区和行业专家合作开发这一新协议。

一些具体的技术目标包括:

  1. 允许许多并发的HTTP请求在单个TCP会话中运行。
  2. 通过压缩头部和消除不必要的头部来减少HTTP当前使用的带宽。
  3. 定义一个易于实现且对服务器高效的协议。我们希望通过减少边缘情况和定义易于解析的消息格式来降低HTTP的复杂性。
  4. 使SSL成为底层传输协议,以获得更好的安全性和与现有网络基础设施的兼容性。尽管SSL确实引入了延迟后果,但相信网络的长期未来取决于安全的网络连接。此外,使用SSL是必要的,以确保跨现有代理的通信不被破坏,尽可能地使服务器能够启动与客户端的通信并向客户端推送数据。

4. SPDY 功能特点

SPDY 在SSL上添加了一层应用会话层,从而允许多个并发且交织的流在单个TCP上运行,HTTP的标准Get和Post消息保持不变,但是SDPY定义了一个新的编码方式并通过电缆传输这些数据。
https://www.chromium.org/spdy/spdy-whitepaper/soarjOjSeS5hoFYvjtAnxCg.png
流是双向的,既可以被客户端初始化,也可由服务端初始化。

4.1 SPDY基本功能

多路复用流

SDPY 允许无线数量的并发流在单个TCP连接上运行,TCP效率大大提升,需要建立的网络连接减少,也减少需要发送的包的数量。

请求优先级

虽然无限数量的并发流解决了序列化问题,但它们引入了另一个问题:如果通道上的带宽受限,客户端可能会阻止请求,以免塞满通道。
为了克服这个问题,SPDY实现了请求优先级:客户端可以从服务器请求任意数量的资源,并为每个请求分配优先级。
这样可以防止在高优先级请求待处理时,通道被非关键资源所塞满。

HTTP头部压缩

SPDY压缩请求和响应的HTTP头部,导致发送的包较少,传输的字节数也减少。

4.2 SPDY高级功能

SPDY提供了一个高级的功能,即服务器启动的流
服务器启动的流可以用来向客户端发送内容,而不需要客户端请求。
可以由网页开发者通过以下两种方式配置:

  1. 服务器推送

它允许服务器通过X-Associated-Content标头向客户端推送数据。
这个标头告知客户端,服务器正在向客户端推送资源,而客户端还没有请求它。
对于首次下载页面(例如,用户第一次访问网站时),这可以极大地提升用户体验。

  1. 服务器提示

相反于自动向客户端推送资源,当服务器知道客户端将需要这些资源时,服务器使用X-Subresources标头向客户端建议它应该请求特定资源。
然而,服务器仍然会等待客户端的请求才发送内容。
在慢链接上,这个选项可以减少客户端发现需要资源所需的时间几百毫秒,并且可能更适合非首次页面加载。

相关文章:

[Cloud Networking] SPDY 协议

文章目录 1. 背景2. SPDY 之前3. SPDY 项目目标4. SPDY 功能特点4.1 SPDY基本功能4.2 SPDY高级功能 1. 背景 TCP是通用的、可靠的传输协议,提供保证交付、重复抑制、按顺序交付、流量控制、拥塞避免和其他传输特性。 HTTP是提供基本请求/响应语义的应用层协议。 不…...

Linux-笔记 samba实现映射网络驱动器到Win 10

前言 之前通过网上的方法成功映射后,现如今在自己电脑想实现映射服务器共享文件夹到Win 10端发现对之前的方法没有总结导致细节出问题,特此写下笔记。 场景 在服务器编译好代码生成镜像后,在Win10端采用软件烧写镜像,但是镜像在服…...

【技巧】Leetcode 67. 二进制求和【简单】

二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” 输出:“10101” 解题思路 …...

vue项目问题汇总

1.el-select: 下拉框显示到了top:-2183px , 添加属性 :popper-append-to-body"false" 2. el-upload: 选过的文件在使用过后记得清空,因为如果有limit1的时候,没有清空会导致不触发onchange 使用自定义上传方法http-request的时…...

Android 工程副总裁卸任

Android 工程副总裁卸任 Android工程副总裁Dave Burke宣布,他将辞去领导Android工程的职位,将重心转向“AI/生物”项目。不过,他并没有离开Alphabet,目前仍将担任Android系统开发顾问的角色。 Burke参与了Android系统的多个关键…...

Qt 6.13

作业: #include "mywidget.h"mywidget::mywidget(QWidget *parent): QWidget(parent) {this->setStyleSheet("background-color:white");this->resize(600,600);this->setWindowFlag(Qt::FramelessWindowHint);this->setWindowTit…...

发布自己的c#包到nuget

1)创建自己的nuget账号 NuGet Gallery | Home 2)在Rider中-->项目邮件-->properties 注意:必须勾选生成nuget包 3)编译后,将生成一个包 4)点击上传包 5)将之前的nuget包拖拽过来,点击上传即可,如果有不对的比如&#xf…...

【学习笔记】MySQL(Ⅲ)

MySQL(Ⅲ) 11、 进阶篇 —— 视图 11.1、概述 11.2、基本语法 11.3、检查选项 CASCADED 11.4、检查选项 LOCAL 11.5、视图的更新原则12、 进阶篇 —— 存储过程 12.1、概述 12.2、基本语法 12.3、系统变量 12.4、用户定义变量 …...

STM32项目分享:心率血氧手环(可报警)

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…...

前端面经总结、学习【2023秋招】

目录 1、浏览器输入URL发生了什么?2、跨域是什么?如何解决跨域问题?3、cookie 是什么?4、cookie 能做什么? 1、浏览器输入URL发生了什么? URL解析:判断浏览器输入的是搜索内容还是URL&#xff…...

Linux DMA-Buf驱动框架

一、DMABUF 框架 dmabuf 是一个驱动间共享buf 的机制,他的简单使用场景如下: 用户从DRM(显示驱动)申请一个dmabuf,把dmabuf 设置给GPU驱动,并启动GPU将数据输出到dmabuf,GPU输出完成后&#xf…...

MySQL之优化服务器设置(三)

优化服务器设置 InnoDB表空间 InnoDB把数据保存在表空间内,本质上是一个由一个或多个磁盘文件组成的虚拟文件系统。InnoDB用表空间实现很多功能,并不只是存储表和索引。它还保存了回滚日志(旧版本行)、插入缓冲(Insert Buffer)、双写缓冲(Doublewrite …...

如何实现 Python 源码压缩加密常用解决方案详细教程(更新中)

Python是一种高级的、解释型的、面向对象的编程语言,Python 码简洁易读,并且Python语言跨平台,拥有丰富的标准库和第三方库,深受开发人员的喜爱。 Python 程序扩展名 .py:这是 Python 程序的标准文件扩展名。当你创建…...

SAP Build 2-PDF数据提取与决策

0. 安装desktop agent 在后续过程中发现要预先安装desktop agent,否则没法运行自动化流程… 0.1 agent下载 参考官方文档说明 https://help.sap.com/docs/build-process-automation/sap-build-process-automation/create-user-in-rbsc-download-repository?loca…...

【回溯】Leetcode 77. 组合【中等】

组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 解题思路 定义递归函数&#xff1…...

项目中常量的定义方式

方式一 在常量个数少的时候,通常情况下使用这种方式。 public class MqConstants {public static final String EXCHANGE_1 "exchange1";public static final String EXCHANGE_2 "exchange2";public static final String EXCHANGE_3 "…...

BL104钡铼多协议采集网关助力企业智能化转型

BL104钡铼多协议采集网关(PLC物联网关BL104)是为满足工业环境需求而设计的专业工业级协议转换网关。它在企业智能化转型过程中扮演着关键角色,为企业提供了高效、稳定的通信解决方案,助力企业实现智能化转型。 首先,P…...

【LC刷题】DAY08:151 55 28 459

【LC刷题】DAY08:151 55 28 459 文章目录 【LC刷题】DAY08:151 55 28 459151. 反转字符串中的单词 [link](https://leetcode.cn/problems/reverse-words-in-a-string/description/)55. 右旋字符串 [link](https://kamacoder.com/problempage.php?pid106…...

Debian 12.5 一键安装 Oracle 19C 单机

前言 Oracle 一键安装脚本,演示华为 Debian 12.5 一键安装 Oracle 19C 单机版过程(全程无需人工干预)。 ⭐️ 脚本下载地址:Shell脚本安装Oracle数据库 安装准备 1、安装好操作系统,建议安装图形化2、配置好网络3、上…...

ARP协议相关

把ip地址解析成mac地址这里的mac地址就是路由器的mac地址 免费ARP 源ip和目的ip都是一样的,那怎么让其他人更新arp表呢?? 是因为目标mac是全f,是一个广播报文 如果冲突就是ip一样但是mac又不一样 代理ARP pc1和pc4是在同一个子网…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【2025年】解决Burpsuite抓不到https包的问题

环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则&#xf…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...