3 行代码一个 Go HTTP 服务:搞懂原理
2021-06-26 16:00:00 Author: mp.weixin.qq.com(查看原文) 阅读量:87 收藏

大家好,我是 polarisxu。

大家应该知道,在 Go 中,搞一个 HTTP 服务特别简单:

http.HandleFunc("/"func(w http.ResponseWriter, r *http.Request) {  fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))})
log.Fatal(http.ListenAndServe(":8080", nil))

但你知道 net/http 标准库都帮你做了什么吗?要弄懂这个问题,你得先熟悉 HTTP 协议。

HTTP 可以说是互联网的基石,我们浏览的网页、刷的视频、玩的游戏,都离不开 HTTP 协议,而且热门的 Nginx、Apache、gRPC 等服务背后的技术也是由 HTTP 协议支撑的,可以说 HTTP 既常见又重要。

就前段时间,我和一位面试官交流心得,他说面试一年多,每当问起候选人对 HTTP 的理解,却经常出现这样的情形:

  • 面试官:请问你了解 HTTP 协议吗?

  • 前端开发:这不是应该后端清楚的吗?

  • 后端开发:这不应该是前端知道的吗?

  • 面试官:......

其实无论是前端还是后端,都需要了解 HTTP。前端接触较多的是在其上层的 HTTP 协议,包括承载请求的 HTTP 和 HTTPS 协议,而随着前端路由的控制越来越多,深刻理解 HTTP 的 Header、Body 等属性是很有好处的。

学好了 HTTP 对于 Web 开发和性能优化等都有用处。比如页面资源的缓存策略,如果对 HTTP 协议不够了解,就没法进行方案的制定或者优化。页面资源加载速度的优化,也同样离不开对 HTTP/2 的了解。

就这么说吧,如果你不懂 HTTP 协议,就相当于是个只有“半桶水”的程序员

话虽如此,不少人觉得:“HTTP 协议好简单的啦,还用系统学吗?” “HTTP 不就是请求 / 响应、GET/POST、Header/Body 吗?网络上的资料一抓一大把,有什么问题搜一下就是了。”

但事实是,就因为 HTTP 太常见、太普遍了,很多工作 7、8 年的老手,也未必搞得清楚,当年我也是在工作上踩了大坑,所以才下定决心“死磕” HTTP。

资料看了一大堆,真正有体系的却不多,罗剑锋的《透视HTTP 协议》专栏,算是一个,给我启发很大,先分享一份他总结的「HTTP 知识图谱」,把零散的概念系统地整理在一起,建议收藏:

最近我又在 2 刷《透视HTTP 协议》,毫不夸张的说,是我见过含金量最高的 HTTP 学习资料,兼具广度和深度,真正做到了“透视”,能让你深刻了解 HTTP 的底层运行机制、工作原理,讲得明白又系统。

由于 HTTP 应用得非常广泛,几乎涉及到所有的领域。所以罗剑锋的内容不只讲协议本身,与它相关的 TCP/IP、DNS、SSL/TLS、Web Server 等都会讲到,而且会把它们打通串联在一起,形成知识链,让你知道它们之间是怎么联系、怎么运行的。

这课是我迄今为止,花最少的时间,用最少的精力,掌握了最多、最全面、最系统的知识。这是多少钱,都买不到的。新人半价 ¥59.9推荐给你,千万别错过👇

新人首单 ¥59.9  ,仅限「前 50 人」
即将恢复至 ¥129相当于 5 折

作者罗剑锋,前奇虎 360 技术专家,是个有着 20 多年技术经验的 IT 老兵,长期从事 Web 后台服务器的研发,熟悉各种网络应用协议,专注于 C/C++、Linux、高性能编程等领域,也是 Nginx/OpenResty 开源项目贡献者。

他之前写过几本畅销书,比如《C++11/14 高级编程》《Nginx 完全开发指南》等等,能出书的,都是真正的行家高手,而且更懂如何讲的体系化。

再来说说专栏的「深度」,也是下足了功夫,全部基于最新的 RFC 标准文档,再结合老罗自己多年的实践体会,力求讲清讲透,能让你看了以后有豁然开朗的感觉。

在「动手实践」上,也独具特色。专栏里教你用 Nginx 搭建一个“麻雀虽小,五脏俱全”的实验环境,即使不联网,也能够在里面收发 HTTP 消息,让你与 HTTP 零距离接触

更惊喜的是,专栏还精心设计了配套的测试用例,最小化应用场景,排除干扰因素,你可以在里面任意测试 HTTP 的各种特性,再配合 Wireshark 抓包,真正做到了理论结合实践。

最简单的浏览器 HTTP 请求过程👆

还有一点不得不说,每篇文末都会设置思考题,建议把它当做模拟面试题,尽量认真思考后再回答。老罗也是真负责,基本上回复了每一条用户留言,内容也很走心,光看评论区就能学到不少。

动手实践 + 思考 + 课后讨论,把“被动地听”,转变为主动地学”,真正学以致用。

口说无凭,把一些读者的评论截图下来作为参考👇

HTTP 只是表面上显得简单,其实底层的运行机制、工作原理非常复杂。只是我们平常总是“KPI 优先”,从网上抓到一个解决方案,用过就完事。但一名合格的工程师,一定得深究要点和细节。只有在大框架上有足够的视野,才不会被动的陷入「学不动了」的情绪。

下面是目录,含有 HTTP 高频面试题目解析,有多干货,自己体会了👇

能找到一个靠谱的大牛,学习人家的技术心法,真是个非常幸运的事儿,足以将你一脚踹上成长的“快车道”。

老规矩,我的粉丝享有专属优惠

新人首单 ¥59.9  ,仅限「前 50 人」
即将恢复至 ¥129相当于 5 折

帮你到这了

扫码查看详情👇

天赋也许会失灵,但努力不会辜负你的期望。

👇点击「阅读原文」,扫码免费试读。
新人首单 ¥59.9  ,相当于半价!
仅限前 50 人,手慢无!

文章来源: http://mp.weixin.qq.com/s?__biz=MzAxNzY0NDE3NA==&mid=2247487496&idx=1&sn=72704b732e56efcdcbcaf7b3124b0c8b&chksm=9be33fe9ac94b6ff074a2f0fce5c0ccf83269d6ee9ca64b136570c3c4d53a331aa7c74db9735#rd
如有侵权请联系:admin#unsafe.sh