透视 HTTP 协议
深入理解 HTTP 协议本质与应用
罗剑锋(Chrono)  前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者
专栏
已完结·共 48 讲
|
6.4w 人已学
|
收藏
兔嘟嘟
老师的关于HTTPS这几篇太精彩了,对比起来,网上的文章要不太学术/数学化,要不太简单
作者回复:many thanks
2021-07-28
Leolee
作业: 1.header后紧跟的第一个空行后的内容都视为body,包括空行; 2.通常都打一个空格是为了节省资源,减少不必要的浪费。 HTTP报文小结: 1.HTTP报文结构简单来说就是:header +body,就像“大头儿子”,由“起始行+头部+空行+实体”组成,可以无body,必须有header、neck(空行); 2. 头部(头部又叫请求头、响应头)构成 ·请求头由“请求行+头部字段”构成,响应头由“状态行+头部字段”构成; ·请求行有三部分:请求方法+请求目标+版本号 ·响应行有三部分:版本号+状态码+原因字符串 完整的请求头和响应头: 3.头部字段: ·头部字段以key-value形式写成,它非常灵活,除了使用标准的Host,connection等已有头,也可以任意添加自定义头,这就给HTTP协议带来了无限的扩展可能; ·头部字段注意事项: 1.字段名不区分大小写,但推荐首字母大写; 2.字段名不允许出现空格、下划线,可以使用连字符“-”; 3.字段名后面接“:”,:前不能有空格,:后可以有多个空格; 4.字段的顺序是么样意义的,可以任意排列不影响语义; 5.字段原则上不能重复,除非这个字段本身的语义允许,例如Set-cookie。 HTTP四类大常用头字段: 1.通用字段:在请求头和响应头里都可以出现; 2.请求字段:仅能出现在请求头里,进一步说明请求信息或者额外的附加条件; 3.响应字段:仅能出现在响应头里,补充说明响应报文的信息; 4.实体字段:它实际上属于通用字段,但专门描述body的额外信息。 划重点!!!对HTTP报文的解析和处理实际上主要就是怼头字段的处理,理解了头字段也就理解了HTTP报文。 4.常用头的作用,理解这些就能看懂大多数的报文了: ·HTTP/1.1里唯一要求必须要提供的头字段是Host,它必须出现在请求头里,标记虚拟主机名,否则当存在多个虚拟主机名时,就会找不到合适的虚拟主机,无法处理。 ·User-Agent是请求字段,只出现在请求头里。它使用一个字符串来描述发起HTTP请求的客户端,服务器可以一句它来返回最合适此浏览器显示的页面。但由于历史原因,它非常混乱,每个浏览器都自称是"Mozilla"、"Chrome"、"Safari",企图使用这个字段来互相“伪装”,导致它变得越来越长,最终变得毫无意义。 不过有的比较“诚实”的爬虫会在这个字段用“spider”表明自己是爬虫,所以可以利用这个字段实现简单的反爬虫策略。 ·Date字段是一个通用字段,但通常出现在响应头里,表示HTTP报文创建的时间,客户端可以使用这个时间再搭配其他字段决定缓存策略。 ·Server字段是响应字段,只能出现在响应头里。它告诉客户端当前正在提供Web服务的软件名称和版本号。 Server字段也不是必须要出现的,因为这会把服务器的一部分信息暴露给外界,如果这个版本恰好存在bug,那么黑客就有可能利用bug攻陷服务器。所以,有的响应头里要么没有这个字段,要么就给出一个完全无关的描述信息。 ·Content-Length表示报文里body的长度,也就是请求头或响应头空行后面数据的长度。服务器看到这个字段,就知道了后续有多少数据,可以直接接收。如果没有这个字段,那么body就是不定长的,需要使用chunked方式分段传输。
作者回复:总结的非常完整,awsome。
2021-04-09
Jerryz
首先,文字+音频的专栏确实比视频的专栏信息密度更高。也更适合学习。 再则,作为一个前端工程师学习 HTTP 原理确实和后端谈接口的时候更有信心了。 老师的专栏质量很高,也确实做了深入浅出。 点个赞。
作者回复:Many thanks。
2021-04-09
CC
惊喜,刚刚好在学习第二遍,看到 HTTP/3 的新文章更新。谢谢老师。
作者回复:学而时习之,不亦乐乎。
2021-03-02
Jerryz
1. DNS 可以定位到一台主机,URI 则可以定位到主机上的资源。 2. 正向代理:我通过查找小强的电话薄,转话到小明。反向代理:我通过查找小明的电话薄,但是和我通话的实际是小强。
作者回复:very nice!
2021-01-12
请问一下,使用telnet发送的如下包 GET /16-2 HTTP/1.1 Host: www.chrono.com Range: bytes=0-9, 20-29 在用wireshark捕获的数据包中,第一个数据包发送了HTTP请求头,但是为什么在包列表中被归为了TCP请求?
作者回复:看不到你的wireshark抓包,不知道具体是什么样的。但我觉得是不是因为http运行在tcp上,所以wireshark就先显示成了tcp,试试可否展开包数据,里面应该就是http协议。
2021-01-11
李皮皮皮皮皮
大头儿子的比喻太赞了,这下一辈子都忘不了了
作者回复:笑,希望能够帮到你。
2020-10-19
王晓聪
断断续续花了一个月时间学完了整个课程,基本每一篇文章的后留言都看了一遍。概念,基础,进阶,安全,飞翔,探索,老师完整的将HTTP密切相关的知识讲了一遍,感谢~
作者回复:大家共同进步。
2020-07-01
哈哈静
老师讲的确实很清晰啊,言辞也很踏实了,喜欢这种风格^0^
作者回复:后面的内容很多,慢慢学,有疑问可以参考其他同学的留言,或者直接问。
2020-06-25
Aaron
一直膜拜阮一峰老师的文笔,他是我读过的技术文章中写的最好的作者。但令我惊讶的是,当我近乎一口气读完 Chrono 老师的本专栏,竟在心底产生有一种『世外桃源』的感觉,不自觉将两位老师进行比较,难分伯仲。感谢 Chrono 老师的付出,在这个追名逐利的大环境下,能做出如此高质量的专栏,可以说是『功德无量』了。
作者回复:实在是过誉了,感谢褒奖!
2020-06-03
讲师

罗剑锋(Chrono)

前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者

罗剑锋,网名“Chrono”。毕业于北京理工大学计算机专业,前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者,熟悉各种网络应用协议,专注于 C/C++、Linux、高性能编程等领域,著有《Nginx 完全开发指南》《C++11/14 高级编程》《Boost 程序...查看更多
编辑推荐
讲师的其他课程
罗剑锋的 C++ 实战笔记
罗剑锋
前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者

32讲 | 35520 人已学习

¥59¥129
Kubernetes 入门实战课
罗剑锋
Kong 高级工程师,Nginx/OpenResty 开源项目贡献者

41讲 | 19548 人已学习

¥59¥129
包含这门课的学习路径

Go工程师

16门课程 89.9w人学习

测试工程师

18门课程 93.7w人学习

前端工程师

24门课程 109.3w人学习

iOS工程师

7门课程 31.2w人学习

后端工程师

27门课程 184.1w人学习
看过的人还看了
数据结构与算法之美
王争
前 Google 工程师

81讲 | 283803 人已学习

¥68¥199
MySQL 实战 45 讲
林晓斌
网名丁奇,前腾讯云数据库负责人

49讲 | 224935 人已学习

¥68¥199
左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家

119讲 | 180999 人已学习

¥98¥399
趣谈网络协议
刘超
前网易研究院云计算技术部首席架构师

51讲 | 130451 人已学习

¥68¥199
编辑训练营
总编室
极客邦科技总编室

9讲 | 8401 人已学习

¥19.9
网络编程实战
盛延敏
前大众点评云平台首席架构师

40讲 | 44218 人已学习

¥59¥129