HTTP2.0协议初探(一)

2024-05-08 20:38
文章标签 协议 初探 http2.0

本文主要是介绍HTTP2.0协议初探(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近需要接触到HTTP2.0的测试工作,所以需要对HTTP2.0协议由浅至深进行了解,因此准备写一个系列的内容,目的是记录学习过程以及以后的工作。

协议简介

HTTP 全称为 HyperText Transfer Protocol,中文叫做超文本传输协议。用于 Web 应用层传输,是 Web 架构的核心,它至今公布有 3 个版本:

HTTP 0.9,只有基本的文本 GET 功能。
HTTP 1.0,完善的请求/响应模型,并将协议补充完整。
HTTP 1.1,在 1.0 基础上进行更新,增加了如 长久连接 keep-alive 与 chunked 等功能。

距最近 1999 年 6 月 HTTP 1.1 RFC 2616 发布以来至今已有 15 年。

而 HTTP 2.0 首个 draft 已于 2012 年 11 月发布,预计到明年初正式发布。它保证了与 HTTP 1.1 的完全语义兼容,最初考虑的是 Google SPDY 协议、微软的 SM 协议和 Network-Friendly HTTP 更新。最终各方推荐了 SPDY 协议,并在此基础上进行了相应更新。

HTTP 2.0 相比 1.1 的更新大部分集中于:

多路复用
HEAD 压缩
服务器推送
优先级请求

在目前的开发过程中,已经有很多公司的产品开始支持HTTP2.0,详细内容可以参见
详细支持列表
在这次的实际探究过程中,采用nghttp2工具进行Client以及Server的模拟交互,以后可能也会考虑其他工具的兼容性。

HTTP2.0内容

  • 官方协议

    HTTP2.0是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发,目前稳定的协议版本内容选用draft-13,具体协议内容可以参考
    Hypertext Transfer Protocol version 2
    draft-ietf-httpbis-http2-13

  • 报文交互

    nghttp2.0工具使用:
    在linux下编译安装nghttp2.0,完成后就可以模拟HTTP2.0的客户端以及服务器,开启服务器端口进程:

nghttpd –no-tls 8080 -v -d /home/chenyan/Documents/html/

开启成功后,使用客户端访问服务器端口:

nghttp http://172.16.75.84:8080/1b.html -H':method:HEAD' -v

如果成功后,设备打印信息如下:

客户端:
[  0.000] send SETTINGS frame <length=12, flags=0x00, stream_id=0>(niv=2)[SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100][SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535]
[  0.001] send HEADERS frame <length=49, flags=0x05, stream_id=1>; END_STREAM | END_HEADERS(padlen=0); Open new stream:authority: 172.16.75.84:8080:method: HEAD:path: /1b.html:scheme: httpaccept: */*accept-encoding: gzip, deflateuser-agent: nghttp2/0.5.0
[  0.004] recv SETTINGS frame <length=6, flags=0x00, stream_id=0>(niv=1)[SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
[  0.005] send SETTINGS frame <length=0, flags=0x01, stream_id=0>; ACK(niv=0)
[  0.005] recv SETTINGS frame <length=0, flags=0x01, stream_id=0>; ACK(niv=0)
[  0.005] (stream_id=1, noind=0) :status: 200
[  0.005] (stream_id=1, noind=0) server: nghttpd nghttp2/0.5.0
[  0.005] (stream_id=1, noind=0) content-length: 2
[  0.005] (stream_id=1, noind=0) cache-control: max-age=3600
[  0.005] (stream_id=1, noind=0) date

这篇关于HTTP2.0协议初探(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971382

相关文章

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请