迟来的HTTP2简明教程

SAP ABAP OAuth 2.0 Client 扩展实战,给自定义 Service Provider 参数值创建 Enhancement Spot Implementation 本文介绍了SAP ABAP系统中OAuth 2.0 Client配置扩展的关键要点。重点分析了OA2C_CONFIG_EXTENSION Enhancement Spot的作用,它允许为Service Provider Type添加额外的OAuth参数配置,如audience、tenant等。文章详细说明了配置扩展与Service Provider Specifics类的关系,强调必须通过IF_OA2C_SPECIFICS~GET_CONFIG_EXTENSION方法将两者关联。同时提供了在SE80中创建E 阅读详情

640?wx_fmt=jpeg

The standardization effort was supported by Chrome, Opera, Firefox,[9] Internet Explorer 11, Safari, Amazon Silk, and Edge browsers.[10] Most major browsers had added HTTP/2 support by the end of 2015.[11]
According to W3Techs, as of November 2017, 20.5% of the top 10 million websites supported HTTP/2.

这是一段来自维基百科的关于HTTP2的说明,截止2015年底,主流浏览器都已经对HTTP2做了支持,根据2017年11月的W3Techs报告说明,全球有1/5的大型网站都已经使用了HTTP2了。作为码农的你已经可以预料HTTP2的时代即将到来,对于HTTP2的技术细节你都准备好了么?

HTTP2的设计要点

  1. 高度兼容HTTP1.1

  2. 减少客户端服务器的交互延迟

    1. Header压缩

    2. Server Push

    3. Pipelining & Mulplexing

我们平常听到的GZIP压缩仅仅是针对HTTP请求的Body部分进行的,这只能算是半压缩。对于很多API服务来说,返回的内容体其实并不大,这个时候请求头就占据了大部分流量。HTTP2将魔爪伸到了HTTP头部,这回是彻底的对整个请求都进行压缩了。

HTTP2的头压缩原理完全不同于HTTP1.1,它将常用的HEADER键值对映射到一个静态表里面的索引值,于是很多头部的键值对使用一个位置索引来表示就可以了。这样便大大节省了头部消息的长度。对于那些不常用的自定义的头部会使用一个动态表来维护,具体原理有一定复杂度,这里就不再啰嗦了。

640?wx_fmt=jpeg

Server Push不同于Websocket,Server Push一般是指服务器主动向客户端推送数据,这是一种单向的主动推送,而WebSocket是双向的,这两种技术不是竞争关系。Server Push可以用在服务器主动向客户端推送静态资源,比如浏览器请求index.html时,服务器除了返回网页内容外,还会将index.html页面里面的各种css和js一起推送到浏览器缓存起来,当浏览器分析了网页内容发现静态资源时,不需要再去服务器请求一次,它只需要从缓存里直接拿就可以了。不过现代的网站的静态资源大多都是CDN架构的,静态资源都在第三方服务器,Server Push在这方面作用并不大。Server Push还可以用在推送通知消息,比如谁关注了你,谁给你点了赞等,这个可以替代古老的Comet技术和近几年Google推广的SPDY协议,它需要服务器维持当前的TCP通道不关闭,需要持续占用服务器资源。

Pipeline是指后一个HTTP请求无需等待前一个HTTP请求返回结果就可以提前发起。HTTP1.1也有Pipeline支持,但是有所不足,并行的还不够彻底。它可以提前发起请求,但是却限定了返回结果必须和收到请求的顺序保持一致而不能乱序。如果第一个请求服务器处理慢了,那么后续的返回结果客户端无法立即收到,而必须等到第一个结果全部返回了才行。HTTP2则解决了这个问题,它支持乱序返回,甚至不同请求的返回结果的分块【HTTP Chunk】也可以交叉返回而不会混乱,这种技术称之为Multiplexing【多路复用】。

HTTP2底层协议

HTTP2协议是二进制协议,不同于HTTP1.1的文本协议。文本协议是以特殊的符号结尾【换行回车符】来分割消息的,而二进制协议是通过字节长度来分割消息。二进制协议虽然直观性不如文本协议,但是在实现的时候要简单直接一些。

640?wx_fmt=jpeg

HTTP2为支持多路复用,在同一条TCP通道上支持发送多个资源/请求,将每条资源/请求定义为一个Stream【流】,同一个TCP通道可以传输多个Stream。同时为了支持多个资源的并行交错发送,将Stream再次分割为多个Frame【帧】,帧与帧之间可以交错发送。接收端通过流ID将这些帧组装起来,通一个流ID的帧属于同一个资源/请求。因为TCP协议已经可以保证消息包是有序的,所以接收端不必担心乱序问题。

640?wx_fmt=jpeg

HTTP2的帧格式非常简单,就是长度+类型+标志位+流ID+PayLoad,长度就是PayLoad的字节数,类型为一个字节,标志位为1个字节,流ID为4个字节,剩下的长度就是PayLoad。不同类型的帧PayLoad不一样,标志位也不一样。

640?wx_fmt=jpeg

HTTP2标准里定义了10种类型的帧。

  1. HEADERS帧 头信息,对应于HTTP HEADER

  2. DATA帧 对应于HTTP Response Body

  3. PRIORITY帧 用于调整流的优先级

  4. RST_STREAM帧 流终止帧,用于中断资源的传输

  5. SETTINGS帧 用户客户服务器交流连接配置信息

  6. PUSH_PROMISE帧 服务器向客户端主动推送资源

  7. GOAWAY帧 通知对方断开连接

  8. PING帧 心跳帧,检测往返时间和连接可用性

  9. WINDOW_UPDATE帧 调整帧大小

  10. CONTINUATION帧 HEADERS太大时的续帧

HTTP2标准定义了3个标志位

  1. END_STREAM 流结束标志,表示当前帧是流的最后一个帧

  2. END_HEADERS 头结束表示,表示当前帧是头信息的最后一个帧

  3. PADDED 填充标志,在数据Payload里填充无用信息,用于干扰信道监听

对于一个普通的GET请求来说,它使用一个HEADERS帧就可以表达。HEADERS帧会设置标志位END_STREAM和END_HEADERS表示当前帧是一个完整的HEADERS帧,也是一个完整的HTTP请求流。

640?wx_fmt=jpeg

对于一个普通的GET请求响应来说,它使用一个HEADERS帧和多个DATA帧就可以表达。HEADERS帧设置END_HEADERS表示当前帧是一个完整的HEADERS帧,后面的DATA帧表示返回的数据,对应Response Body。在HTTP1.1里面返回的Body长度较大,就需要分Chunk进行传输。HTTP2是通过分成多个DATA帧来进行的,最后一个DATA帧有一个END_STREAM标记表示Body的结束。

640?wx_fmt=jpeg

如果HEADERS太大无法用一个HEADERS帧表达,可以后面跟多个CONTINUATION帧,最后一个帧附加END_HEADERS标志即可。

640?wx_fmt=jpeg

在服务器主动向客户端推送资源时,同一个资源流里不使用HEADERS帧,取而代之的是PUSH_PROMISE帧,表示服务器承诺客户端即将推送指定资源数据,用于区别一个常规的HTTP GET资源请求。

640?wx_fmt=jpeg

如果一个TCP连接正在被用于客户端从服务器下载一个大型文件,那么客户端取消发送这个文件的办法只有一个,就是关闭连接。HTTP2则可以在不关闭连接的情况下终止发送文件,客户端向服务器发送一个RST_STREAM帧通知服务器停止相应的资源流即可。这个连接还可以继续服务其它的请求。

HTTP2服务器接收到一个客户端的连接时,第一个要干的事就是和客户端交换SETTINGS帧信息,告知对方一些交互元信息的设置,例如是否开启服务器推送,并行的最大流数量,单帧最大长度等。

在客户端观看视频流时,如果服务器发送的太慢会影响观看体验,如果发的太快,会对客户端的浏览器缓存造成压力。客户端可以使用WINDOW_UPDATE帧通知服务器调整帧窗口大小进而控制服务区发送的数据速率。

640?wx_fmt=jpeg

阅读相关文章,关注微信号【码洞】

电源完整性之Cadence Sigrity Power DC_IR_Drop仿真 之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power DC组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power DC组件,然后先择licence,最后就可以打开我们之前转化好的.SPD文件。操作如下图: 2.设置层叠信息和过孔焊盘参数 层叠信息:每层的介质厚度、材料、介电常数、介质损耗角等,如 阅读详情

相关推荐

从零开始!在 Windows 上安装与配置 Dify

这篇博客将详细介绍如何在 Windows 系统上部署 Dify,适合零基础用户。从 Docker 和 WSL 的安装配置开始,逐步指导用户设置 Git、Docker 环境以及 Dify 配置文件,解决可能遇到的端口冲突等问题,最终完成 Dify 的启动和测试。通过简明易懂的步骤,帮助用户在本地成功运行 Dify,实现模型供应商配置,让 Dify 项目在 Windows 平台上顺利上线。

qq_49035156的博客 5万+

http2使用入门

http2使用入门 http2主要特性 二进制传输:以二进制方式传输 Header 压缩:专门的"HPACK”算法可以达到50%~90%的高压缩率 多路复用:可以只通过一个 TCP 连接就可以传输所有的请求数据 Server Push:在浏览器刚请求HTML的时候就提前把可能会用到的JS、CSS文件发给客户端,减少等待的延迟, http2注意点 1、http2浏览器支持情况,绝大数浏览器已支持http2 2、大部分浏览器只基于 TLS 部署的HTTP2.0协议,所有一般会先升级成https 3、jdk8以

csdn740228413的博客 3178

ALTERA MAX10 FPGA 串口远程升级实战:从原理到烧录的避坑指南

本文详细解析了ALTERA MAX10 FPGA如何通过串口实现远程升级。文章从工程师实战经验出发,深入剖析了MAX10片内Flash的双镜像备份原理、CONFIG_SEL引脚启动机制,并重点介绍了使用On-Chip Flash IP核进行擦写操作的核心流程。同时,提供了从Quartus工程配置、RPD文件生成、串口协议设计到驱动代码编写的完整避坑指南,旨在帮助开发者稳定、高效地完成远程升级功能部署。

weixin_29197699的博客 276

HTTP2入门

前面文章介绍了ProtoBuf序列化协议,这是gRPC牛逼原因之一,原因之二是采用了HTTP2,HTTP2是从SPDY发展而来,以前淘宝MTOP平台植入了SPDY协议来进行性能优化,这样淘宝客户端调后端接口就能快XX倍,现在应该是换成HTTP2.0了吧,很多年了,都快忘记MTOP是个啥了,所以经常写笔记做整理还是很有必要的。本实验目的是测试HTTP2多路复用特性。

程序员青菜学厨记 688

ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与碳储量预测(附完整数据包)

本文详细介绍了如何整合ArcGIS、PLUS模型和InVEST模型,构建土地利用变化与碳储量预测的完整研究流水线。通过多情景模拟和生态系统服务评估,提供从数据准备到结果验证的实战指南,助力研究者高效完成生态评估项目。

weixin_30399821的博客 545

STM32N6实战:FSBL引导XIP运行ThreadX与NetX Duo

在嵌入式系统开发中,程序的存储与执行方式直接影响启动速度和系统实时性。传统MCU常将代码拷贝到内存运行,而高主频处理器则可通过XIP(片外Flash原地执行)技术直接从外部存储取指,省去拷贝过程。但XIP的前提是外部存储器控制器需在上电后第一时间完成初始化,这正是FSBL(第一级引导程序)的核心职责。FSBL负责配置时钟与外部Flash,并将控制权移交给应用。而要让设备具备实时调度与网络能力,可搭配ThreadX实时内核和NetX Duo双协议栈,两者在CubeMX中原生集成,形成一套高性能MCU+外部存储

weixin_29191669的博客 320

怎样在 Nginx 中配置 HTTP2 协议?

HTTP2 协议是 HTTP 协议的重大升级,它带来了一系列显著的性能改进。用一个形象的比喻,如果把 HTTP1.1 比作是一条单行道,车辆(数据)只能一辆接一辆地行驶,那么 HTTP2 就是一条多车道的高速公路,车辆(数据)可以同时并行行驶,大大提高了交通(数据传输)的效率。多路复用: 不再像 HTTP1.1 那样需要按顺序依次请求和响应,多个请求和响应可以在同一个连接上同时进行,就好像多条数据流在一根管道中并行传输,互不干扰。头部压缩: 对请求和响应的头部进行压缩,减少了不必要的数据传输量。

发现生活,分享智慧,一起成长! 4117

C#精准获取Windows已安装应用清单的完整方案

Windows已安装应用识别是IT资产管理、安全合规与自动化运维的基础能力。其核心原理在于突破文件系统表象,以注册表为可信数据源,分层解析HKLM/HKCU、64位/32位视图及MSI Products路径中的元数据。技术价值体现在可验证(如过滤SystemComponent=1)、可关联(通过ProductCode绑定补丁与许可证)、可操作(启动路径二次验证+卸载命令沙箱执行)。典型应用场景包括终端合规审计、软件资产清查、静默卸载脚本开发及多版本应用聚合分析。本文聚焦C#原生实现,覆盖注册表四路采集、La

weixin_33552698的博客 637

迟来的前端面经

最近也是在换工作,小公司和大厂(虾皮、腾讯)都有面试。几次面试收获还是比较大的,了解许多自己的短板,当然也拿到了合适的offer。本文主要整理下面试遇到的问题和知识点,希望对准备找工作的掘友有所帮助。 基础部分 面试的时候,前端基础知识,还是仔细准备,这一块可以问的东西很多,不管哪一面,都将会有问到,或者通过面试题来考察。 你对css3的动画属性了解多少? 这个问题,是在介绍项目的时候,面试官提出来的。我介绍的项目是一个利用贝塞尔曲线公式,来控制小车做曲线运动移动到对应的位置,抽取奖品。我自己是用js套用公

cpythonsz的博客 370

从工艺文件到寄生分析:手把手教你用华大九天RCExplorer做版图预检(附ITF文件解析)

本文详细介绍了华大九天RCExplorer工具在模拟IC和版图设计中的应用,从工艺文件解析到寄生参数提取的全流程。通过ITF文件的深度解析和实战案例,帮助工程师掌握金属层、介质层及通孔参数的关键影响,提升设计效率与准确性。文章还提供了与StarRC工作流集成的实用技巧,是国产EDA工具应用的权威指南。

weixin_42522552的博客 408

AI Agent Harness Engineering 监控与日志系统搭建

在生成式AI(Generative AI)与大语言模型(LLM)普及的今天,AI Agent(自主智能代理)已经成为了继「LLM API调用」「单轮/多轮对话」之后的第三代AI应用范式——Agent能够自主感知环境、制定多步决策、调用外部工具(Web搜索、数据库、RAG检索、企业系统API等)、执行复杂任务并优化自身策略。然而,随着Agent应用从Demo原型快速落地到企业生产环境,一系列与工程化落地强绑定的可观测性(Observability)问题正在成为Agent项目成功上线、稳定运行的最大瓶颈。

AI开发架构师 184

迟来的前端面试经验

然后面试就提了上面的问题,我的回答(常规操作),animation开头的后面的属性,能记住的都说了,最后面试官问我知道 css3也可以设置贝塞尔曲线么,还有 animationend 事件 ,然后项目的新的思路就出来了,利用css3 cubic-bezier 结合动画结束事件 animationend ,就可以实现小车的曲线运动了。具体的实现原理,大家多看看相关的文章,我也在摸索中,哈哈。面试的时候,前端基础知识,还是仔细准备,这一块可以问的东西很多,不管哪一面,都将会有问到,或者通过面试题来考察。

qq_24428851的博客 558

OpenDataLab 大模型训练数据集下载记录

大模型 训练数据集

u013558123的博客 3348

系统笔记,迟来的云日志

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33943836的博客 104

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

RubyConfChina2012, 迟来的博文, 附部分讲师的PPT

  这篇一直躺在evernote里, 时隔一个月放出来, 迟来的博文。   Matz , Ruby语言创始人. 松本行弘   平生有如此的机会, 能够见到如此伟大的语言设计师, 能够听他现场布道, 感受code for fun的思想. 这绝对一件令人兴奋的事情. matz 从日本而来, 主要宣传了Ruby 2.0 & MobiRuby(mruby).   ruby ...

nodeblog的专栏 226

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

周报 3月14号 迟来的

总结:   这星期并没有很好地完成任务,由于陷入了死循环,又不会问人,导致自己走了非常长的弯路,结果浪费了好多时间,自己的自制力也消退了一些。其实细想一下,把任务首先完成了是当务之急,其次再去扩展,不然深陷泥泞的话,不仅前进慢了,并且有可能就这么深陷其中了。还有向人表达出我有困难的信号,向别人求助是非常必要的,但是我还是没有把握好,并不知道什么时候问人是合适的,而且也不知道自己够格不....

bannesi6888的博客 192

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

工程岗位面试问题,迟来的6月份字节跳动面经,Activity的6大难点你会几个

我一直以来都有整理练习大厂面试题的习惯,有随时跳出舒服圈的准备,也许求职者已经很满意现在的工作,薪酬,觉得习惯而且安逸。不过如果公司突然倒闭,或者部门被裁减,还能找到这样或者更好的工作吗?我建议各位,多刷刷面试题,知道最新的技术,每三个月可以去面试一两家公司,因为你已经有不错的工作了,所以可以带着轻松的心态去面试,同时也可以增加面试的经验。我可以将最近整理的一线互联网公司面试真题+解析分享给大家,大概花了三个月的时间整理2246页,帮助大家学习进步。

2301_76190858的博客 928

迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中

服务器发送的事件 (或简称为SSE )是非常有用的协议,它允许服务器通过HTTP将数据推送到客户端。 这是我们的网络浏览器支持的年龄,但令人惊讶的是, JAX-RS规范在很长一段时间内都忽略了这一点。 尽管Jersey提供了适用于SSE媒体类型的扩展名,但该API尚未正式化,因此不能移植到其他JAX-RS实现中。 幸运的是, JAX-RS 2.1 (也称为JSR-370)通过将SSE支持...

最佳 Java 编程 776

计算机网络(2)

计算机网络(2) 文章目录17.Http和Https的区别?18.加密与认证18.1讲讲对称加密与非对称加密?18.2讲讲HTTPS加密与认证过程?(字节问过..)19.TCP 的 TIME_WAIT知道吗?/简述什么是 MSL,为什么客户端要等待2MSL的时间才能完全关闭?20.说说什么是 SYN flood,如何防止这类攻击?(泛洪攻击)21.说说什么是 TCP 粘包和拆包?22.说说从系统层面上,UDP 如何保证尽量可靠?23.说一说 TCP 的 keepalive,以及和 HTTP 的 keep.

qq_56811048的博客 815

*迟来的爱*——《Foursquare》应用源码学习(一) 下载、编译、运行

做Android项目做到好几年的程序,发现技术进步很慢,逐渐往管理发展。。于是, 要看开源项目,学习别人的成功经验,来解决项目中遇到的棘手问题。   于是看到了别人推荐的android的开源源码,找了一个与我现在做的项目差不多的。。FourSquare。。   下载。。。   打开官网,http://code.google.com/p/foursquared/source/check

edwar12345r的专栏 1252

jax-rs jax-ws_迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中

jax-rs jax-ws 服务器发送的事件 (或简称为SSE )是非常有用的协议,它允许服务器通过HTTP将数据推送到客户端。 这是我们的Web浏览器支持的年龄,但是令人惊讶的是, JAX-RS规范在很长一段时间内都忽略了这一点。 尽管Jersey提供了适用于SSE媒体类型的扩展名,但该API尚未正式化,因此不能移植到其他JAX-RS实现中。 幸运的是, JAX-RS 2.1 (也称为J...

最佳 Java 编程 373

迟来的6月份字节跳动面经(Android 客户端)

作者:老王 开篇 先说明一下, 楼主是二本双非学校, 且非科班生, 有三个App上架, 大三在读 4月1号投了字节的简历, 4月中旬参加了笔试, 4月底收到字节面试邀请 5月初参加了第一轮面试, 5月中旬参加了二面, 5月27日参加了三面 6月8日 offer mail 一面(60分钟) 前15分钟 个人介绍, 什么时候接触的安卓开发, 实习能实习多久, 介绍一下项目 你说你的软件出现了OOM, 你怎么解决的? 线上crash你是用了什么来分析的? 这些项目都是怎么来的? 软件中这些内容都怎么来的.

鸿蒙开发知识记录 431

网络协议常用面试题汇总(一)

Buffer:与Channel进行交互,数据是从Channel读入缓冲区,从缓冲区写入Channel中的;flip方法:反转此缓冲区,将position给limit,然后将position置为0,其实就是切换读写模式;clear方法:清除此缓冲区,将position置为0,把capacity的值给limit。rewind方法:重绕此缓冲区,将position置为0;可减少一次系统空间到用户空间的拷贝。但Buffer创建和销毁的成本更高,不可控,通常会用内存池来提供性能。...

故不积跬步无以至千里 2832

Linux总结-----2

Linux知识点1.网络编程1.1IP地址三级目录 1.网络编程 1、网络 :由若干结点和链接这些节点的链路组成(计算机、交换机、路由器) 目的:进行信息交互、资源共享 2、互联网:多个网络连接起来构成互联网 1.1IP地址 ip地址:唯一标识一台主机 端口号:在主机上标识一个进程 三级目录 ...

m0_54720446的博客 166

Struts2框架下Log4j2漏洞检测与修复实战指南

在Java Web开发中,日志记录是应用可观测性的基础组件,而Log4j2作为广泛使用的日志框架,其安全机制直接关系到系统防护能力。Log4j2漏洞(CVE-2021-44228)的原理在于JNDI查找功能未对用户输入进行充分验证,攻击者可通过构造恶意日志消息触发远程代码执行。该漏洞的技术价值在于揭示了供应链安全中“幽灵依赖”和运行时环境差异带来的风险,尤其在Struts2这类传统MVC框架中,依赖传递的隐蔽性和类加载机制的复杂性会显著增加检测难度。应用场景通常出现在企业级遗留系统维护和安全评估过程中,需要

weixin_28715953的博客 311
上一篇: Spark通信原理之Python与JVM的交互
下一篇: 以太坊合约分析之远程购买
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值