[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标头向客户端建议它应该请求特定资源。
然而,服务器仍然会等待客户端的请求才发送内容。
在慢链接上,这个选项可以减少客户端发现需要资源所需的时间几百毫秒,并且可能更适合非首次页面加载。

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

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

相关文章

Apache IoTDB进行IoT相关开发实践

当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计&…

【面试干货】Integer 和 int 的区别

【面试干货】Integer 和 int 的区别 1、基本类型与包装类型2、内存占用3、自动装箱与拆箱4、null 值5、常量池6、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java中,Integer 和 int 是两种不同类型的变量,…

REST风格

黑马程序员Spring Boot2 文章目录 1、REST简介1.1 优点1.2 REST风格简介1.3 注意事项 2、RESTful入门案例 1、REST简介 1.1 优点 隐藏资源的访问行为,无法通过地址的值对资源适合中操作书写简化 1.2 REST风格简介 按照RST风格访问资源时使用行为动作区分对资源进…

Python:基础爬虫

Python爬虫学习(网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字…

OpenGauss常操作

OpenGauss官网已经有很详细的说明了,但是对于新手而言还有一些需要注意的地方; 安装 yum一键安装; yum -y install libaio-devel yum -y install readline-devel yum -y install libnsl 单独创建用户和组; groupadd dbgroup useradd -g dbgroup omm passwd omm 取消打开文…

RK3568平台(input篇)输入设备应用编程

一.输入设备介绍 输入设备其实就是能够产生输入事件的设备就称为输入设备,常见的输入设备包括鼠标、键盘、触摸屏、按钮等等,它们都能够产生输入事件,产生输入数据给计算机系统。 对于输入设备的应用编程其主要是获取输入设备上报的数据、输…

Django更改超级用户密码

Django更改超级用户密码 1、打开shell 在工程文件目录下敲入: python manage.py shell再在python交互界面输入: from django.contrib.auth.models import User user User.objects.get(username root) user.set_password(123456) user.save()其中ro…

每日一练——有效的括号

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 错误记录 #include<stddef.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h>typedef char STDataType;typedef struct Stack {STDataType* a;int capacity;int top; } Stack;vo…

【回文 马拉车】214. 最短回文串

本文涉及知识点 回文 马拉车 LeetCode214. 最短回文串 给定一个字符串 s&#xff0c;你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1&#xff1a; 输入&#xff1a;s “aacecaaa” 输出&#xff1a;“aaacecaaa” 示…

超详解——Python 字典详解——小白篇

目录 1. 创建字典 示例&#xff1a; 2. 访问字典中的元素 示例&#xff1a; 3. 修改字典元素 示例&#xff1a; 4. 删除字典元素 示例&#xff1a; 5. 查找元素是否是字典的键 示例&#xff1a; 6. 标准类型操作符 获取字典长度 合并两个字典 7. 常用内置函数 k…

【Qt】QT textBrowser 设置字体颜色和大小

1. 效果 2. 代码 {ui->methodText->append("<font size9 colorgreen> dddddddddd </font>");ui->methodText->append("<font size9 colorred> vvvvvvvvvv </font>"); }

读AI新生:破解人机共存密码笔记02进化

1. 人工智能的标准模型 1.1. 机器优化人类提供的固定目标 1.1.1. 是一条死胡同 1.1.1.1. 当你走进死胡同时&#xff0c;你最好掉头返回&#xff0c;找出走错的地方 1.2. 问题不在于我们可能无法做好构建人工智能系统的工作&…

atmega8 上传程序

使用icsp 烧写时先关闭串口程序&#xff0c;与串口uart连接相关的电路勿于电脑连接 接触不良 1.使用icsp 上传 1&#xff09;可以直接上传程序 如官方示例blink 或是 serial示例 2&#xff09;可以先烧录bootload 方便下次使用串口上传程序代码 A)使用专门的icsp 上传器上传…

AI Stable diffusion 报错:稳定扩散模型加载失败,退出

可能是内存不够&#xff0c;看看你最近是加了新的大的模型&#xff0c;可以把你的stable-diffusion-webui\models\Stable-diffusion目录下的某个ckpt删除掉&#xff0c;可能ckpt太大&#xff0c;无法加载成功&#xff1b; Stable diffusion model failed to load, exiting 如图…

如何在WIndows虚拟机安装 macOS 黑苹果系统?

在本教程中&#xff0c;我们将介绍如何在虚拟机上安装 macOS 黑苹果系统。黑苹果系统是非苹果公司官方支持的 macOS 系统的非官方版本&#xff0c;可以在普通 PC 上运行。请注意&#xff0c;安装黑苹果系统可能违反苹果的许可协议&#xff0c;请自行承担风险。参考视频教程&…

如何应对生活中的不确定性:仁者安仁,知者利仁。

有较高自尊水平的人&#xff0c;接近于孔子说的&#xff1a;仁者。 ——— 有着稳定的高自尊&#xff0c;无论外在环境如何变化&#xff0c;对其影响都不大&#xff0c;他能够愉快地生活。 相反&#xff1a;一个人处于低自尊状态&#xff0c;就会活得很痛苦&#xff0c;对自己…

手机丢失不惊慌,华为手机已升级至楼层级设备查找!

出门总是丢三落四&#xff0c;手机丢了怎么办&#xff1f;不要怕&#xff0c;只要你的华为手机升级至云空间新版本&#xff0c;就可以进行楼层级设备查找&#xff0c;现在可以查看到具体的楼层了&#xff01; 之前有手机丢失过的朋友&#xff0c;肯定有相似的经历&#xff0c…

Python **运算符(python**kwargs:参数解包)(kwargs:keyword arguments)

文章目录 Python中的 ** 运算符&#xff1a;参数解包参数解包基础语法和示例 在函数定义中使用 **示例代码 使用场景和好处1. 灵活性&#xff1a;使用 **kwargs 允许函数设计得更加灵活&#xff0c;可以接受未来可能增加的新参数而无需修改函数定义。2. 可读性和可维护性&#…

注册中心理论学习

注册中心介绍 注册中心&#xff08;也称为服务注册中心或服务发现服务&#xff09;是微服务架构中的一个关键组件&#xff0c;它负责服务的注册与发现。在微服务体系中&#xff0c;服务实例的数量和位置是动态变化的&#xff0c;注册中心提供了一个集中的地方来存储这些信息&a…

Elasticsearch搜索引擎(高级篇)

3.1 查询语法 | 《ElasticSearch入门到实战》电子书 (chaosopen.cn) day09-Elasticsearch02 - 飞书云文档 (feishu.cn) 目录 第一章 DSL查询 1.1 基本语法 1.2 叶子查询 全文检索查询 精确查询 1.3 复合查询 算分函数查询 bool查询 1.4 排序 1.5 分页 基础分页 深度分…