基于ABNF语义定义的HTTP消息格式
ABNF (Augmented BNF)官方文档
https://www.ietf.org/rfc/rfc5234.txt
巴科斯范式的英文缩写为BNF,它是以美国人巴科斯(Backus)和丹麦人(Naur)的名字命名的一种形式化的语法表示方法,用来描述语法的一种形式体系,是一种典型的元语言。又称巴科斯-诺尔形式(Backus-Naur form)。它不仅能严格的表示语法规则,而且所描述的语法与上下文无关的。它具有语法简单,表示明确,便于语法分析和编译的特点。
ABNF(扩充巴科斯-瑙尔范式)操作符
空白字符:用来分隔定义中的各个元素
- method SP request-target SP HTTP-version CRLF
选择 /:表示多个规则都是可供选择的规则
- start-line=request-line / status-line
值范围 %c##-##
- OCTAL="0" / "1" / "2" / “3” / “4” / “5” / ”6“ / ”7“ 与 OCTAL=%x30-37 等价
序列组合():将规则组合起来,视为单个元素
不定量重复 m*n
- * 元素表示零个或更多元素:*(header-field CRLF)
- 1* 元素表示一个或更多元素,2*4 元素表示两个至四个元素
可选序列 []:
- [ message-body ]
基于ABNF语义定义的HTTP消息格式
HTTP-message=start-line *( header-filed CRLF ) CRLF [ message-body ]
- start-line=request-line / status-line
- request-line=method SP resquest-status SP HTTP-version CRLF
- status-line=HTTP-version SP status-code SP reason-phrase CRL
- header-filed=field-name ":" OWS field-value OWS
- OWS=*(SP / HTAB)
- field-name=token
- field-value=*(field-content / obs-fold )
- message-body=*OCTET
在xshell下面:先输入
telnet www.taohui.pub 80
回车后会出现
Trying 116.62.160.193...
Connected to www.taohui.pub.
Escape character is '^]'.
然后再输入:
GET /wp-content/plugins/Pure-Highlightjs_1.0/assets/pure-highlight.css?ver=0.1.0 HTTP/1.1
回车后继续输入:
Host:www.taohui.pub
即可看见上面的界面。
上面的截图是通过Wireshark工具捕获上面xshell中请求和响应的报文,这样可以看见一些不可见的字符,如图中的20代表着空格,0d 0a 代表着CRLF.