一 HTTP协议定义
① RFC7230定义
说明: 关注'红色关键字'
② 无状态
解读: 连续的'两个'请求,后续的请求'不能依赖'前一个请求,各个请求是'相互独立'
③ 基于请求/相应
④ 可扩展
⑤ 浏览器发起http请求
⑥ 协议协商
⑦ 浏览器内核引擎的一些事情
⑧ 浏览器发起 HTTP 请求的典型场景
二 HTTP协议的具体格式
① 口语化的HTTP消息格式
② 基于ABNF语义描述HTTP消息格式
1) 定义'协议格式'的时候常用'ABNF'范式,最为'严谨'
2) 包含两部分:'操作符'和'核心规则',这里介绍'常用的'
ABNF文档
++++++++++++ 基于 'ABNF' 描述的 HTTP 协议格式 ++++++++++++
说明: 这里'通用规则'来描述,我们每天都在'用的HTTP消息'遵循的ABNF规范
③ 对HTTP的消息格式做演示
Host --> '48 6f'
\r\n --> '0d 0a'
Capture --> Options --> '选网卡' --> 'host nginx.wzj.com或 port 80' --> '抓包'
BPF'过滤器'的表示方法:host nginx.wzj.com 或 port 80
补充: 不要使用'https'协议,因为涉及'加密','无法'观察到
C语言解析HttpResponse
④ telnet ip port原汁原味
RFC规定: 如果请求中'没有携带Host'头部,一律返回'400 Bad Request',telenet需要自己指定
telnet退出:
【1】先按 'Ctrl+ ]',再在telnet命令行输入'quit'就可以了
【2】可以Ctrl+],然后再'close或q',退出
强调:telnet只是建立起了TCP连接,必须'显示'向服务器发送HTTP请求,才能得到HTTP响应
测试方法:
GET / HTTP/1.1
Host: www.wzj.com
⑤ ABNF的补充
ABNF作为元语言确实'很晦涩',不过'使用场景'到是特别多,在'grpc等应用层协议'中也能看到它的身影
RFC2616里有一个小节在介绍ABNF --> '2.1 Augmented BNF'
BNF介绍
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)