zoukankan      html  css  js  c++  java
  • 基于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.

  • 相关阅读:
    Log4j,Log4j2,logback,slf4j日志学习(转)
    MultipartFile类
    @Transactional(转)
    redis序列化和反序列化
    redis常见问题(转)
    为什么说Redis是单线程的以及Redis为什么这么快!(转)
    Numpy 用法小结
    正则表达式使用小结
    Hive 窗口函数、分析函数
    Hive UDF开发实例学习
  • 原文地址:https://www.cnblogs.com/fengxiaoyuan/p/10903169.html
Copyright © 2011-2022 走看看