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.

  • 相关阅读:
    git---如何解决The authenticity of host can't be established.
    前端模板引擎artTemplate.js
    微信小程序
    小程序的项目结构设计
    拖拽插件SortableJS
    iscroll.js的简单使用方法
    头疼的闭包
    关于setTimeout的妙用前端函数节流
    webpack 加载动态图片
    在React中实现条件渲染的7种方法
  • 原文地址:https://www.cnblogs.com/fengxiaoyuan/p/10903169.html
Copyright © 2011-2022 走看看