[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的主要特点包括:
- 多路复用:允许在一个SPDY连接内有无限个并行请求,这样可以共享一个TCP会话进行多个HTTP请求,从而减少消息交互往返的时间和延迟。
- 请求优先级:可以设置优先级,选择性地传输更重要的资源,如CSS和JavaScript,然后是其他资源。
- HTTP头部压缩:删除不必要的头信息,通过压缩减少数据传输所带来的等待时间和带宽。
- 服务器推送技术:服务器可以主动向客户端发送数据,这种预加载可以使用户一直保持一个快速的网络。
SPDY协议不是用于替代HTTP的协议,而是对HTTP协议的增强。它通过实现多路复用、请求优先级、头部压缩和服务器推送等功能,提高了网页加载速度,同时也减少了延迟。
随着时间的推移,SPDY协议已经成为了HTTP/2的基础,并在多个浏览器和服务器上得到了广泛支持。
2. SPDY 之前
在SPDY协议之前,还有其他协议来解决网络延迟,只是他们大多处在传输层或会话层:
- Stream Control Transmission Protocol(SCTP) 用于替代TCP的传输层协议,提供多路复用流和流意识的拥塞控制。
- HTTP over SCTP:一种让HTTP在SCTP上运行的协议
- Structured Stream Transport (SST),一种创建“结构化流”的协议,是一种清凉、独立的用于在普通传输层上运行的协议。可以替代TCP或者运行在UDP上。
- MUX/SMUX,结余传输层和应用层之间的协议,它提供了流的多路复用。
这些都提供了解决一些互联网延迟问题的方法,但由于HTTP中的问题(压缩、优先级等)仍然需要解决,这与底层的传输层协议无关。从实际上讲,改变传输层是非常难以部署的。
3. SPDY 项目目标
SPDY项目定义并实现了一个应用层协议,用于大幅度减少网络的延迟。SPDY的High Level 目标包括:
- 目标是减少50%的页面加载时间。
- 最小化部署复杂性。SPDY使用TCP作为底层传输层,因此不需要对现有网络基础设施进行任何更改。
- 避免需要网站作者对内容进行任何更改。支持SPDY所需的唯一更改是在客户端用户代理和Web服务器应用程序中。
4,. 聚集志同道合的团体,期望与开源社区和行业专家合作开发这一新协议。
一些具体的技术目标包括:
- 允许许多并发的HTTP请求在单个TCP会话中运行。
- 通过压缩头部和消除不必要的头部来减少HTTP当前使用的带宽。
- 定义一个易于实现且对服务器高效的协议。我们希望通过减少边缘情况和定义易于解析的消息格式来降低HTTP的复杂性。
- 使SSL成为底层传输协议,以获得更好的安全性和与现有网络基础设施的兼容性。尽管SSL确实引入了延迟后果,但相信网络的长期未来取决于安全的网络连接。此外,使用SSL是必要的,以确保跨现有代理的通信不被破坏,尽可能地使服务器能够启动与客户端的通信并向客户端推送数据。
4. SPDY 功能特点
SPDY 在SSL上添加了一层应用会话层,从而允许多个并发且交织的流在单个TCP上运行,HTTP的标准Get和Post消息保持不变,但是SDPY定义了一个新的编码方式并通过电缆传输这些数据。

流是双向的,既可以被客户端初始化,也可由服务端初始化。
4.1 SPDY基本功能
多路复用流
SDPY 允许无线数量的并发流在单个TCP连接上运行,TCP效率大大提升,需要建立的网络连接减少,也减少需要发送的包的数量。
请求优先级
虽然无限数量的并发流解决了序列化问题,但它们引入了另一个问题:如果通道上的带宽受限,客户端可能会阻止请求,以免塞满通道。
为了克服这个问题,SPDY实现了请求优先级:客户端可以从服务器请求任意数量的资源,并为每个请求分配优先级。
这样可以防止在高优先级请求待处理时,通道被非关键资源所塞满。
HTTP头部压缩
SPDY压缩请求和响应的HTTP头部,导致发送的包较少,传输的字节数也减少。
4.2 SPDY高级功能
SPDY提供了一个高级的功能,即服务器启动的流。
服务器启动的流可以用来向客户端发送内容,而不需要客户端请求。
可以由网页开发者通过以下两种方式配置:
- 服务器推送
它允许服务器通过X-Associated-Content标头向客户端推送数据。
这个标头告知客户端,服务器正在向客户端推送资源,而客户端还没有请求它。
对于首次下载页面(例如,用户第一次访问网站时),这可以极大地提升用户体验。
- 服务器提示
相反于自动向客户端推送资源,当服务器知道客户端将需要这些资源时,服务器使用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包拖拽过来,点击上传即可,如果有不对的比如…...
【学习笔记】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ÿ…...
Linux DMA-Buf驱动框架
一、DMABUF 框架 dmabuf 是一个驱动间共享buf 的机制,他的简单使用场景如下: 用户从DRM(显示驱动)申请一个dmabuf,把dmabuf 设置给GPU驱动,并启动GPU将数据输出到dmabuf,GPU输出完成后…...
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], ] 解题思路 定义递归函数࿱…...
项目中常量的定义方式
方式一 在常量个数少的时候,通常情况下使用这种方式。 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是在同一个子网…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
