基于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.

posted @ 2019-05-21 23:19  冯小圆  阅读(1433)  评论(0编辑  收藏  举报