美文网首页
浏览器工作原理-HTTP 协议

浏览器工作原理-HTTP 协议

作者: 抉择_路 | 来源:发表于2020-05-12 17:23 被阅读0次

基于 ABNF 语义定义的 HTTP 消息格式

1. 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]

2. ABNF (扩充巴科斯-瑙尔范式) 核心规则

规则 形式定义 意义
ALPHA %x41-5A / %x61-7A 大写和小写 ACSII 字母(A-Z,a-z)
DIGIT %x30-39 数字(0-9)
HEXDIG DIGIT / "A" / "B" / "C" / "D" / "E" / "F" 十六进制数字(0-9,A-F, a-f)
DQUOTE %x22 双引号
SP %x20 空格
HTAB %x09 横向制表符
WSP SP / HTAB 空格或横向制表符
LWSP *(WSP / CRLF WSP) 直线空白(晚于换行)
VCHAR %21-7E 可见(打印)字符
CHAR %x01-7F 任何7-位 US-ASCII 字符,不包括 NUL(%x00)
OCTET %x00-FF 8位数据
CTL %x00-1F / %x7F 控制字符
CR %x0D 回车
LF %x0A 换行
CRLF CR LF 互联网标准换行
BIT "0" / "1" 二进制数字

3. 基于 ABNF 描述的 HTTP 协议

HTTP-message = start-line *(header-field CRLF) CRLF [message-body]
  start-line = request-line / status-line
     request-line = method SP request-target SP HTTP-version CRLF
     status-line = HTTP-version SP status-code SP reason-phrase CRLF
  header-field = field-name ":" OWS field-value OWS
    OWS = *(SP / HTAB)
       field-name = token
       field-value = *(field-content / obs-fold)
  message-body = *OCTET  二进制的方式传递 

4.常见方法

  • GET:主要的获取信息方法,大量的性能优化都针对该方法
  • HEAD: 类似 GET 方法,但服务器不发送 BODY,用以 获取 HEAD 元数据,幂等方法
  • POST: 常用于提交 HTML FORM 表单、新增资源等
  • PUT: 更新资源,带条件时是幂等方法
  • DELETE: 删除资源,幂等方法
  • CONNECT: 建立 tunnel 隧道
  • OPTIONS: 显示服务器对访问资源支持的方法,幂等方法
  • TRACE: 回显服务器收到的请求,用于定位问题,有安全风险

5.两种传输HTTP 包体的方式

5.1 定长包体

  • 发送 HTTP 消息时能够确定包体的全部长度
    • 使用 Content-Length 头部明确指明包体长度
      • Content-Length = 1*DIGIT
        *用10进制(不是16进制)表示包体中的字节个数,且必须与实际传输的包体长度一致

5.2 不定长包体的 chunk 传输方式

  • 发送 HTTP 消息时不能确定包体的全部长度
    • 使用 Transfer-Encoding 头部指明使用 Chunk 传输方式
      • 含 Transfer-Encoding 头部后 Content-Length 头部应被忽略
  • Transfer-Encoding 头部
    • tranfer-coding = "chunked" / "compress" / "deflate" / "gzip" / transfer-extension
    • Chunked transfer encoding 分块传输编码:Transfer-Encoding: chunked
      • chunked-body = *chunk
        last-chunk
        trailer-part
        CRLF
      • chunk = chunk-size [chunk-ext] CRLF chunk-data CRLF
        • chunk-size -- 1*HEXDIG : 注意这里是16进制而不是10进制
        • chunk-data -- 1*OCTET : 1个或多个十六进制数据
      • last-chunk = 1*("0") [chunk-ext] CRLF
      • trailer-part = *(header-filed CRLF) : o个或多个头部字段

相关文章

  • 前端训练营第五周学习总结

    浏览器工作原理 总论与Http协议 URL --http--> HTML --parse--> DOM --css...

  • 浏览器工作原理-HTTP 协议

    基于 ABNF 语义定义的 HTTP 消息格式 1. ABNF (扩充巴科斯-瑙尔范式)操作符 空白字符:用来分隔...

  • Tomcat和Nginx

    Tomcat架构和原理剖析 TPC/IP Http协议 浏览器访问服务器使用HTTP协议,Http是应用层协议,定...

  • 第六个模块 HTTP协议、Restful

    HTTP协议 · HTTP协议 · 工作原理 HTTP协议请求 HTTP协议响应 HTTP协议消息报头 1、普通报...

  • HTTP协议:工作原理

    HTTP协议:工作原理 1. HTTP简介 HTTP协议(HyperText Transfer Protocol,...

  • HTTP请求和响应

    1.HTTP工作原理 HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即...

  • 8.php与web页面交互

    web工作原理 HTTP协议 HTTP协议(HyperText Transfer Protocol,超文本传输协议...

  • HTTP协议

    HTTP 协议 工作原理 HTTP协议请求 HTTP协议响应 常见状态代码、状态描述、说明: HTTP协议消息报头

  • 浏览器工作原理之HTTP协议

    浏览器要做的事情, 就是把一个URL变成一个屏幕上可以显示的网页 大体流程是这样的: 浏览器首先使用HTTP协议或...

  • http协议

    1、上网流程2、web服务器的工作原理3、DNS工作原理4、HTTP协议 1、上网流程浏览器本身它是一个客户端,当...

网友评论

      本文标题:浏览器工作原理-HTTP 协议

      本文链接:https://www.haomeiwen.com/subject/blgbnhtx.html