计算机网络-HTTP相关知识-HTTP的发展

HTTP/1.1

特点:

  • 简单:HTTP/1.1的报文格式包括头部和主体,头部信息是键值对的形式,使得其易于理解和使用。
  • 灵活和易于扩展:HTTP/1.1的请求方法、URL、状态码、头字段等都可以自定义和扩展,使得其具有很高的灵活性。同时,其下层(如SSL/TLS,TCP/UDP)也可以随意变化。
  • 跨平台表现良好:HTTP/1.1可以在各种操作系统和硬件平台上运行。
  • 无状态:HTTP/1.1是无状态的,这意味着服务器不需要存储关于客户端的信息。这减轻了服务器的负担,但也意味着每次进行关联操作时都需要进行身份验证。为了解决这个问题,服务器可以存储Cookie来记录上次访问的信息。
  • 长连接:HTTP/1.1支持长连接,即一次握手后可以进行多次请求-响应。
  • 支持管道网络传输:虽然默认关闭,但HTTP/1.1支持管道网络传输,即发送第一个请求后无需等待响应就可以继续发送请求,但响应需要按顺序进行。如果前面的响应时间过长,可能会造成队头阻塞。

优化方法:

  • 启用缓存:通过启用缓存,可以减少请求次数,从而提高效率。
  • 减少重定向:重定向可能会导致额外的请求和响应,增加了延迟。如果存在代理服务器,可以让代理服务器直接发送新的URL请求,从而减少重定向的影响。
  • 合并请求:由于HTTP/1.1默认关闭管道,可能会发生队头阻塞。通过合并请求,可以减少重复的HTTP头部和TCP连接过程。具体方法包括将多个小图片合并成大图片,使用webpack等打包工具,或者将图片数据用base64编码嵌入到HTML中。
  • 延迟请求:在同一页面中,可以在用户需要时(如图片)再发送请求,从而减少不必要的请求。
  • 压缩:可以使用无损压缩(如gzip、Brotli)来压缩文本和源代码,或者使用有损压缩(如Google的WebP格式)来压缩视频和图片,从而减少传输的数据量。

HTTP/2.0

  • 兼容性:HTTP/2.0在语义层面上兼容HTTP/1.1,这意味着所有基于HTTP/1.1的应用都可以在HTTP/2.0上运行。但在语法方面,HTTP/2.0进行了一些升级和改进,以提高性能和效率。
  • 头部压缩:HTTP/2.0引入了HPACK算法进行头部压缩,解决了HTTP/1.1中只能对body进行压缩的问题。HPACK算法包括静态字典、Huffman编码和动态字典三部分。静态字典包含常用的字段和字段值,用数字代替。Huffman编码则是根据字符出现的频率进行二进制编码。动态字典则是在通信过程中,根据实际的头部字段动态生成的。
  • 二进制帧: HTTP/2.0引入了二进制分帧层,这是一个新的抽象层,位于应用层和传输层之间。在这个层次上,HTTP消息被分解为多个较小的消息和帧,然后进行交互。这种设计使得HTTP/2.0可以更有效地利用网络资源,提高传输效率。
    每个帧都包含以下部分:

    • 帧头:包括帧长度(表示帧数据的长度)、帧类型(定义帧的类型,如数据帧或头部帧)、标志位(提供帧相关的特定信息)和流标识符(唯一标识一个流)。
    • 帧负载:帧的主体部分,包含由帧头描述的数据。
  • 并发传输:HTTP/2.0支持多个Stream复用一个TCP连接,每个HTTP请求与响应都在同一个Stream中进行,一个HTTP消息可以由多个Frame构成,一个Frame可以由多个TCP报文构成。
    并发传输的特点:
    • 不同Stream的帧可以乱序发送:在一个TCP连接中,来自不同Stream的帧可以乱序发送,通过Stream ID来区分属于哪个Stream。
    • 同一Stream内部的帧必须是严格有序的:在一个Stream中,帧的发送和接收必须是有序的,保证了消息的完整性和正确性。
    • 双方都可以建立Stream:在一个TCP连接中,客户端和服务端都可以建立Stream,客户端的Stream ID为奇数,服务端的Stream ID为偶数。
    • 同一个连接中的Stream ID不能复用:在一个TCP连接中,每个Stream ID只能被使用一次,当所有的Stream ID都被使用完后,需要发送GOAWAY帧来断开连接。
    • 支持服务端主动推送:例如,当客户端请求一个HTML文件时,服务端可以主动推送与该HTML文件相关的CSS文件,这可以减少客户端的请求次数,提高加载速度。

HTTP/3.0

  • 使用UDP + QUIC代替TCP:HTTP/3.0使用UDP + QUIC来代替TCP,解决了TCP的固有问题,如队头阻塞、握手延迟等。
  • 帧结构:HTTP/3.0的帧结构与HTTP/2.0相同,都采用二进制帧。由于流控制使用QUIC协议,帧头选用帧类型和数据长度两个字段。这种结构使得HTTP/3.0可以更有效地利用网络资源,提高传输效率。
  • 头部压缩使用QPACK:HTTP/3.0的头部压缩使用QPACK,类似于HPACK,但进行了一些改进,如静态字典扩大,使用QUIC特殊的两个单向流来同步动态表。这种设计使得HTTP/3.0的头部压缩更加高效。
  • 无队头阻塞:HTTP/3.0通过给每个数据包赋予唯一标识,解决了HTTP/2.0中某个流的包丢失会影响整个TCP的问题。这种设计使得HTTP/3.0在面对网络丢包时,可以更快地恢复传输。
  • 更快的连接建立:HTTP/3.0通过连接ID来实现,并且QUIC中包含了TLS1.3,在QUIC握手的同时进行TLS握手,从而实现更快的连接建立。这种设计使得HTTP/3.0在建立连接时,可以更快地开始数据传输。
  • 连接迁移:HTTP/3.0使用连接ID来标记通信的两个端点,即使断开连接,只要仍保有上下文信息,就可以直接复用连接,解决了HTTP/2.0中网络切换需要重新连接的问题。这种设计使得HTTP/3.0在面对网络环境变化时,可以更快地恢复传输。

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

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

相关文章

docker------docker入门

🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:Linux 🤝希望本文对您有所裨益,如有不足之处&#…

好用的Android Studio插件管理器

1.使用阿里云的通义灵码方便快速开发 1.1下载插件File->plugin->marketplace 搜索 Tongyilingma然后安装重启登录阿里云,确认 1.2 使用方法 输入信息描述 比如 //写一段冒泡排序然后换行,输入public/private/protected方法会自动生成联想代码…

机器学习——几个线性模型的简介

目录 形式 假设 一元回归例子理解最小二乘法 多元回归 广义线性回归 对数线性回归 逻辑回归 线性判别分析 形式 线性说白了就是初中的一次函数的一种应用,根据不同的(x,y)拟合出一条直线以预测,从而解决各种分类或回归问题,假设有 n …

【ZZULIOJ】1031: 判断点在第几象限(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 从键盘输入2个整数x、y值,表示平面上一个坐标点,判断该坐标点处于第几象限,并输出相应的结果。 输入 输入x,y值表示一个坐标点。坐标点不会处于x轴和…

03原理图:接口、无线、电机、STM32主控、整体模块化设计总结

接口部分 一、TTL 转 USB 驱动电路设计 方案很多,本设计采用的芯片是 CH340E 。 该芯片内部已经集成了振荡器,不需要外部增加晶振。如果其他型号的芯片内部没有振荡器,则外面需要加一个晶振。 再看这篇笔记的时候,你可能有点懵…

蓝桥杯第十三届电子类单片机组决赛程序设计

前言 一、决赛题目 1.比赛题目 2.题目解读 二、功能实现 1.关于定时器资源 1)超声波和NE555需要的定时器资源 2)定时器2 2.单位切换 3.数据长度不足时,高位熄灭 4.AD/DA多通道的处理 5.PWM输出 6.长按功能的实现 三、完整代码演…

Qt C++ | Qt 元对象系统、信号和槽及事件(第一集)

01 元对象系统 一、元对象系统基本概念 1、Qt 的元对象系统提供的功能有:对象间通信的信号和槽机制、运行时类型信息和动态属性系统等。 2、元对象系统是 Qt 对原有的 C++进行的一些扩展,主要是为实现信号和槽机制而引入的, 信号和槽机制是 Qt 的核心特征。 3、要使用元…

en-input输入框限制可以负号、数字、以及两位小数

只能输入数字 <!-- 只能输入数字&#xff0c;且长度最长为16位&#xff08;maxlength"16"&#xff09; --> <el-inputv-model.trim"form.testA"maxlength"16"onkeyup"valuevalue.replace(/\D/g,)"onafterpaste"valueva…

JSON在量化交易系统中的应用

JSON在量化交易系统中的应用场景 数据传输和存储&#xff1a;JSON可以将交易数据以结构化的方式进行编码&#xff0c;并将其转换为字符串进行传输和存储。这样可以方便地在不同的系统之间传递数据&#xff0c;并且可以保持数据的完整性和一致性。 API通信&#xff1a;量化交易…

三星加强Bixby智能:迈向生成式AI,抗衡谷歌Gemini

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

AI2.0时代如何快速落地AI智能应用开发,抓住时代机会

写在前面的话 当我们提到人工智能时也就是AI的时候呢&#xff0c;我们大多数人首先想到的可能就是像chatGPT这样的聊天机器人&#xff0c;这些聊天机器人通过理解&#xff0c;还有生成自然语言可以给我们提供一些信息&#xff0c;这个是AI最终的形态吗或者AI最终的形式吗&…

django-hexo-admin(一个基于django的hexo博客平台)

django-hexo-admin 一个过分简单的前后端分离的基于django、vue3的hexo博客平台后台管理系统 1. 项目介绍 一个异常简单的但理论上能够完全保留hexo生态的博客后台管理系统。仅仅对hexo的source以及输出路径public做出了一定的硬性调整,所以如果你很熟悉hexo,那么你将非常轻…

【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)

这里写目录标题 STM32资料包&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码&#xff1a;8888 一、任务描述二、任务实施1、工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#…

Docker资源管理和分配指南

什么是cgroup&#xff1f; cgroups其名称源自控制组群&#xff08;control groups&#xff09;的简写&#xff0c;是Linux内核的一个功能&#xff0c;用来限制、控制与分离一个进程组&#xff08;如CPU、内存、磁盘输入输出等&#xff09;。 什么是Docker资源限制&#xff1f;…

代码随想录阅读笔记-二叉树【合并二叉树】

题目 给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠&#xff0c;那么将他们的值相加作为节点合并后的新值&#xff0c;否则不为 NULL 的节…

vue快速入门(四)v-html

注释很详细&#xff0c;直接上代码 上一篇 新增内容 使用v-html将文本以html的方式显示 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

《论文阅读》一种基于反事实推理的会话情绪检测无训练去偏框架 EMNLP 2023

《论文阅读》一种基于反事实推理的会话情绪检测无训练去偏框架 EMNLP 2023 前言简介相关工作模型构架Basic ClassificationBias ExtractionUnbiased Inference实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天…

WPS二次开发系列:WPS SDK初始化

作者持续关注WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 本文将详细介绍WPS SDK初始化&#xff0c;帮您能够更…

【web】nginx+php-fpm云导航项目部署-(简版)

一、yum安装nginx yum -y install nginx 二、php环境安装 2.1 php安装 yum -y install php 2.2 php-fpm安装 yum -y install php-fpm 注&#xff1a;PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。 2.3 项目依赖的php-xml和php-xmlrpc安装 yum -y install php-…

开源模型应用落地-chatglm3-6b模型小试-入门篇(一)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…