第 6 章 使用 Go 语言实现 HTTP/1.1 客户端
[日] 涩川喜规
本章我们将使用 Go 语言来实现第 4 章和第 5 章介绍的一些功能。使用 Go 语言的目的是向读者展示创建向 API 服务器发送请求的客户端的方法。另外,笔者也希望读者能通过代码加深对知识的理解。即使一些功能不会用于 API 客户端,我们也能通过再次阅读第 4 章和第 5 章的内容来进一步理解。笔者在学习软件方面的论文和难度较高的算法时,都会一并阅读代码,或者使用自己擅长的语言再次进行实现,以此来巩固知识。理解得不透彻,就无法编写代码,通过实际编写代码,能够确认自己的理解是否正确。
第 3 章仅介绍了向用于测试的服务器发送请求的客户端代码,而在 HTTP/1.1 中,即使从客户端的角度来看语义(通信内容及含义)没有发生变化,很多时候语法(通信协议)也发生了变化。为了能在一些项目中实际连接客户端来确认运行情况,笔者先来介绍一下服务器的代码。
6.1 Keep-Alive
即使不对 Go 语言的 HTTP API 进行任何设置,Keep-Alive 也是默认有效的。在通信正常结束后,会话仍会继续。不过,文档中明确记载了客户端必须在读取完 response.Body 后将其关闭。由于这是将套接字管道按时间分割来共享的结构,所以如果不声明主体已经读取完毕,程序就无法判断何时开始下一个任务,也就无法重复使用套接字。如果之前的 HTTP 访问失败,response.Body() 中会存储 nil;而在访问成功的情况下,即使是 Content-Length:0 这种主体为空的情况,io.Reader 的主体也一定会保存到 response.Body() 中。因此,在未发生错误时,有必要像代码清单 6-1 那样读取完毕。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
本文深入探讨了使用 Go 语言创建 HTTP/1.1 客户端的步骤,并重点介绍了在 Go 中实现向 API 服务器发送请求的方法。通过示例代码演示了在 Go 中实现 HTTP/1.1 客户端的具体操作,包括 Keep-Alive 的默认有效性、使用标准库的 TLS 通信以及创建证书的流程。文章还提到了创建证书时需要注意的细节,如在服务器的证书中需要准确输入主机名以进行域名认证。此外,还介绍了如何测试 HTTPS 连接以及使用 Go 语言实现客户端的代码。另外,还介绍了协议升级的目的和实现方式,以及如何处理 Chunk 形式的数据。通过实际操作和详细的步骤,读者可以快速了解如何在 Go 语言中实现 HTTP/1.1 客户端,并学习到创建证书的基本流程。整体而言,本文以实际操作为主线,为读者提供了一份实用的技术指南,适合对 Go 语言和网络通信感兴趣的读者阅读。文章还介绍了远程过程调用(RPC)的框架和相关实现,以及 TLS 的相关内容,为读者提供了全面的技术视角。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《详解 HTTP:协议基础与 Go 语言实现》
《详解 HTTP:协议基础与 Go 语言实现》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论