详解 HTTP:协议基础与 Go 语言实现
[日] 涩川喜规
《Go 系统编程》作者
407 人已学习
立即订阅
登录后,你可以任选4讲全文学习
课程目录
已完结/共 23 讲
时长 24:41
时长 19:39
时长 06:49
时长 00:38
详解 HTTP:协议基础与 Go 语言实现
15
15
1.0x
00:00/00:00
登录|注册

第 9 章 使用 Go 语言实现 HTTP/2、HTML5 的协议

本章将使用 Go 语言来实现第 7 章介绍的一部分协议。由于第 8 章介绍的大部分是面向服务器端的功能,以及与 CSS 和视频流技术相关的内容,所以这里省略其实现。

9.1 HTTP/2

Go 语言从 2016 年 2 月发布的版本 1.6 开始对 HTTP/2 提供支持。仅通过设置 HTTPS 通信,表示 HTTP/2 的 h2 就会添加到第 4 章介绍的 NPN/ALPN 协商的候补中。如果客户端和服务器通过协商能够确认对方支持 HTTP/2,就可以使用 HTTP/2 进行通信。
代码清单 9-1 用于与 Google 进行通信,并确认协议版本。
代码清单 9-1 确认 HTTP 协议版本
package main
import (
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://google.com/")
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Printf("Protocol Version: %s\n", resp.Proto)
}
Go 语言能够通过环境变量来控制是否支持 HTTP/2(表 9-1)。
表 9-1 使用 GODEBUG 环境变量来控制 HTTP/2 的功能
环境变量说明
http2client=0将客户端的 HTTP/2 支持设为无效
http2server=0将服务器的 HTTP/2 支持设为无效
http2debug=1将 HTTP/2 相关的调试日志设为有效
http2debug=2输出清除帧等更多的调试日志
我们加上这些环境变量来运行一下代码。由于最详细的日志(http2debug=2)中的数据量太大,所以这里省略了一部分。该模式可能是为修改 HTTP/2 层的代码的人设计的。从下面的代码中可以看出,应用程序的创建者仅使用简单的环境变量(http2debug=1)就能查看通信记录。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了使用 Go 语言实现 HTTP/2 和 HTML5 协议的相关内容。首先,通过设置 HTTPS 通信并确认对方支持 HTTP/2,即可使用 HTTP/2 进行通信。文章提供了使用环境变量控制 HTTP/2 功能的方法,并给出了相关的示例代码和调试日志。其次,Go 语言从版本 1.8 开始支持的 HTTP/2 服务器推送功能,通过比较 HTTP/1.1 和 HTTP/2 的网络选项卡状态和时间轴详细内容,展示了 HTTP/2 在性能上的优势。此外,文章还介绍了在 Go 语言的 HTTP/2 实现中,使用模拟请求来创建推送的方法。另外,还介绍了 Server-Sent Events 和 WebSocket 的实现方法,为读者提供了全面的技术视角。文章内容丰富,通过具体的代码示例和性能对比,生动地展示了 Go 语言实现 HTTP/2 和 HTML5 协议的技术特点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《详解 HTTP:协议基础与 Go 语言实现》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部