iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang TCP 服务器读取 HTTP/2 帧
  • 138
分享到

Golang TCP 服务器读取 HTTP/2 帧

2024-04-04 23:04:03 138人浏览 独家记忆
摘要

大家好,我们又见面了啊~本文《golang tcp 服务器读取 Http/2 帧》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希

大家好,我们又见面了啊~本文《golang tcp 服务器读取 Http/2 帧》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我正在尝试设置一个接受并解码 http/2 数据的 tcp 服务器。实际解析帧的代码可以在这篇文章中找到:

在go中解码http2帧头/数据

但是,我在设置服务器时遇到了问题。连接被接受,但挂在 framer.readframe() 上。这是一个代码示例:

// generate with: openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.pem -days 365 -nodes
cert, err := tls.loadx509keypair("server.pem", "server.key")
if err != nil {
    log.fatal(err)
}

tlscfg := &tls.config{
    certificates: []tls.certificate{cert},
    nextprotos:   []string{"h2"},
}

l, err := tls.listen("tcp", ":8787", tlscfg)
if err != nil {
    log.fatal(err)
}
defer l.close()

conn, err := l.accept()
if err != nil {
    log.fatalln(err)
}
defer conn.close()

framer := http2.newframer(conn, conn)
frame, _ := framer.readframe() // here it hangs

我使用curl请求服务器

curl -v https://127.0.0.1:8787/ -k --http2


解决方案


对话doesn't start with a frame。首先客户端发送字符串

"pri * http/2.0\r\n\r\nsm\r\n\r\n"

您可以通过检查客户端发送的字节来判断:

framer := http2.newframer(conn, io.teereader(conn, hex.dumper(os.stdout)))

// 00000000  50 52 49 20 2a 20 48 54  54 50 2f 32 2e 30 0d 0a  |pri * http/2.0..|
// 00000010  0d 0a 53 4d 0d 0a 0d 0a  00 00 12 04 00 00 00 00  |..sm............|
// 00000020  00 00 03 00 00 00 64 00  04 40 00 00 00 00 02 00  |......d..@......|
// 00000030  00 00 00 00 00 04 08 00  00 00 00 00 3f ff 00 01  |............?...|
// 00000040  00 00 1e 01 05 00 00 00  01 82 84 87 41 8a a0 e4  |............a...|
// 00000050  1d 13 9d 09 b8 f3 af 3b  7a 88 25 b6 50 c3 ab b6  |.......;z.%.p...|
// 00000060  fa e0 53 03 2a 2f 2a ^c

如果您修改代码以首先读取该字符串,它将按预期工作:

conn, err := l.Accept()
if err != nil {
    log.Fatalln(err)
}   
defer conn.Close()

const preface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
b := make([]byte, len(preface))
if _, err := io.ReadFull(conn, b); err != nil {
    log.Fatalln(err)
}
if string(b) != preface {
    log.Fatalln("invalid preface")
}

framer := http2.NewFramer(conn, conn)
frame, err := framer.ReadFrame()
fmt.Println(frame, err)

// Output:
// [FrameHeader SETTINGS len=18] <nil>

如果我自己使用 http2 时发现这些文章有用:

  • https://developers.google.com/WEB/fundamentals/perfORMance/http2/
  • http://undertow.io/blog/2015/04/27/An-in-depth-overview-of-HTTP2.html

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持编程网!更多关于Golang的相关知识,也可关注编程网公众号。

您可能感兴趣的文档:

--结束END--

本文标题: Golang TCP 服务器读取 HTTP/2 帧

本文链接: https://www.lsjlt.com/news/596101.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang TCP 服务器读取 HTTP/2 帧
    大家好,我们又见面了啊~本文《Golang TCP 服务器读取 HTTP/2 帧》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希...
    99+
    2024-04-04
  • Golang搭建HTTP服务器
    目录一. 安装Golang二. 搭建HTTP服务器三. 扩展HTTP服务器处理HTTP请求处理参数处理静态文件四. 总结一. 安装Golang 在开始之前,我们需要先安装好Golan...
    99+
    2023-05-16
    Golang搭建HTTP服务器 Golang HTTP服务器 Golang 服务器
  • Golang 编写Tcp服务器的解决方案
    目录Echo 服务器拆包与粘包问题优雅关闭Golang 开发 Tcp 服务器及拆包粘包、优雅关闭的解决方案 Golang 作为广泛用于服务端和云计算领域的编程语言,tcp socke...
    99+
    2024-04-02
  • 如何使用Java 11 HTTP Client API实现HTTP/2服务器推送
    这篇文章将为大家详细讲解有关如何使用Java 11 HTTP Client API实现HTTP/2服务器推送,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。对 HttpUrlConnection 你还有印象...
    99+
    2023-06-02
  • Golang如何搭建HTTP服务器
    这篇文章主要讲解了“Golang如何搭建HTTP服务器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang如何搭建HTTP服务器”吧!一. 安装Golang在开始之前,我们需要先安装好...
    99+
    2023-07-06
  • 怎样实现Node.js中的HTTP/2服务器推送
    今天就跟大家聊聊有关怎样实现Node.js中的HTTP/2服务器推送,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。最近Node.js v8.4+版本...
    99+
    2024-04-02
  • Golang如何实现简单http服务器
    这篇文章主要介绍“Golang如何实现简单http服务器”,在日常操作中,相信很多人在Golang如何实现简单http服务器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang如何实现简单http服务器...
    99+
    2023-07-05
  • 如何从 TCP 套接字服务器读取所有数据并随后执行操作
    本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何从 TCP 套接字服务器读取所有数据并随后执行操作》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~问...
    99+
    2024-04-04
  • 云服务器读取u盘失败
    一种解决方案是检查云服务器的设置。通常,云服务器的设置会包括访问权限、错误日志、网络设置等信息,用户可以通过查看这些设置来解决读取u盘失败的问题。 另外,用户也可以尝试重新启动云服务器,或者尝试从其他计算机登录云服务器,以确保问题不再发生...
    99+
    2023-10-28
    服务器
  • 云服务器读取u盘数据
    首先,云计算可以实现灵活的资源管理和动态扩展。企业可以根据业务需要来动态分配和调整资源,以适应不同的需求和环境。例如,如果一个企业需要存储大量的数据来分析市场趋势,他们可以选择购买云服务器来存储和扩展数据。另一方面,如果一个企业需要处理大量...
    99+
    2023-10-28
    服务器 数据
  • 读取阿里云服务器数据
    本文主要介绍如何通过编程方式读取阿里云服务器上的数据。阿里云服务器是阿里集团提供的云服务器服务,它提供了稳定、灵活、高效的计算和存储能力。本文将通过Python编程语言,演示如何连接阿里云服务器,读取服务器上的数据。 在使用阿里云服务器之前...
    99+
    2023-10-29
    阿里 服务器 数据
  • 阿里云服务器异常读取
    对于阿里云服务器的异常读取问题,我们需要进行详细的分析。首先,服务器异常的原因可能是因为服务器内部发生故障,或者是因为操作系统更新不及时等原因导致的。因此,我们需要定期检查服务器的系统日志,以便及时发现异常并进行处理。 另外,服务器异常还...
    99+
    2023-10-27
    阿里 异常 服务器
  • Golang怎么搭建HTTP服务器(方法详解)
    Golang是一种非常流行的编程语言,它的开发速度快,代码运行效率高等特点非常适合做Web应用的开发。本文将介绍如何使用Golang搭建HTTP服务器。一. 安装Golang在开始之前,我们需要先安装好Golang。你可以在官网下载Gola...
    99+
    2023-05-14
  • Golang搭建HTTP服务器的方法是什么
    本篇内容介绍了“Golang搭建HTTP服务器的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一. 安装Golang在开始之前,我...
    99+
    2023-07-05
  • Golang TCP服务器 - 实现客户端之间的数据交流
    “纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《Golang TCP服务器 - 实现客户端之间的数据交流》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新...
    99+
    2024-04-04
  • Ubuntu中怎么利用TCP协议获取服务器时间
    这期内容当中小编将会给大家带来有关Ubuntu中怎么利用TCP协议获取服务器时间,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。代码如下:#include "unp.h"int main...
    99+
    2023-06-13
  • 免费http代理服务器ip怎么获取
    您可以在以下网站上获取免费的HTTP代理服务器IP:1. https://free-proxy-list.net/2. https:...
    99+
    2023-06-14
    免费http代理服务器ip 代理服务器 服务器
  • 怎么在Golang中优雅地关闭HTTP服务器
    这篇“怎么在Golang中优雅地关闭HTTP服务器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么在Golang中优雅地关...
    99+
    2023-07-05
  • java如何读取服务器端文件
    要读取服务器端的文件,可以使用Java中的java.net包中的类来建立与服务器的连接,并通过输入流来读取文件内容。以下是一个简单的...
    99+
    2024-04-09
    java 服务器
  • 怎么读取云服务器的图片
    要读取云服务器上的图片,您可以使用以下步骤:1. 首先,确保您有云服务器的访问权限,以及可以连接到该服务器。2. 登录到您的云服务器...
    99+
    2023-08-08
    云服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作