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

第 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
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了使用 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 语言实现》
立即购买
登录 后留言

精选留言

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