美文网首页
(一) HTTP 版本 及 报文结构

(一) HTTP 版本 及 报文结构

作者: 捞小虾 | 来源:发表于2018-03-23 16:39 被阅读20次

    Author: Xu FC

    HTTP 版本


    HTTP (Hypertext Transfer Protocol, 超文本传输协议) 是常见的应用层传输协议。该协议有诸多版本,目前应用最广泛的为 HTTP/1.1 版本。

    HTTP/1.1 报文结构


    HTTP-message   = start-line
                     *( header-field CRLF )
                     CRLF
                     [ message-body ]
    
    • 行结束符: CRLF,或者单独的 CR,或者单独的 LF,每个报文中的分隔符需要一致,不能在同一报文中混合使用。

    • HTTP header-field 与 message-body 之间以空行分割。

    • Partial Content 的 body part 之间以空行分割。

    • HTTP/1.1 请求示例

      HTTP/1.1 请求示例
    • Start-line: 红框部分为请求行,其中包括

      • Request method(红字部分)
      • URL(绿字部分)
      • HTTP 版本(橘字部分)
    • Header-field:绿框部分为请求头部域,其中

      • Header name(棕色部分)
      • Header value(蓝色部分)
      • Header name 与 header value 以冒号(:)分隔
      • 一个 header 多个值,各值之间以逗号(,)分隔
      • Header value 中的 值 与 属性 之间以分号(;)分隔
      • Cookie header 中的各个 cookie 以逗号或分号(,|;)分隔
    • Message-body:黄框部分为请求主体,并不是所有请求都带 message-body, 比如 HEAD 等请求不带 body,POST 等请求带 body。

    • HTTP/1.1 应答

      HTTP/1.1 应答示例
    • Start-line: 红框部分为应答行,其中包括

      • HTTP 版本(橘字部分)
      • 响应状态码(绿字部分): 三位数字
        1xx:收到请求,请继续
        2xx:收到并完成请求
        3xx:重定向
        4xx:客户端错误
        5xx:服务器错误
      • 原因短语(红字部分)
    • Header-field:绿框部分为应答头部域,结构同请求头部域

    • Message-body:黄框部分为请求主体,并不是所有应答都带 message-body, 比如 HEAD 请求的应答不带 body。

    HTTP/2 报文结构(待续)


    root@67:~# nghttp http://179.1.1.63:8080/ -v
    [  0.000] Connected
    [  0.000] recv SETTINGS frame <length=6, flags=0x00, stream_id=0>
              (niv=1)
              [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
    [  0.000] send SETTINGS frame <length=12, flags=0x00, stream_id=0>
              (niv=2)
              [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
              [SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535]
    [  0.000] send SETTINGS frame <length=0, flags=0x01, stream_id=0>
              ; ACK
              (niv=0)
    [  0.000] send PRIORITY frame <length=5, flags=0x00, stream_id=3>
              (dep_stream_id=0, weight=201, exclusive=0)
    [  0.001] send PRIORITY frame <length=5, flags=0x00, stream_id=5>
              (dep_stream_id=0, weight=101, exclusive=0)
    [  0.001] send PRIORITY frame <length=5, flags=0x00, stream_id=7>
              (dep_stream_id=0, weight=1, exclusive=0)
    [  0.001] send PRIORITY frame <length=5, flags=0x00, stream_id=9>
              (dep_stream_id=7, weight=1, exclusive=0)
    [  0.001] send PRIORITY frame <length=5, flags=0x00, stream_id=11>
              (dep_stream_id=3, weight=1, exclusive=0)
    [  0.001] send HEADERS frame <length=45, flags=0x25, stream_id=13>
              ; END_STREAM | END_HEADERS | PRIORITY
              (padlen=0, dep_stream_id=11, weight=16, exclusive=0)
              ; Open new stream
              :method: GET
              :path: /
              :scheme: http
              :authority: 179.1.1.63:8080
              accept: */*
              accept-encoding: gzip, deflate
              user-agent: nghttp2/1.27.0-DEV
    [  0.014] recv SETTINGS frame <length=0, flags=0x01, stream_id=0>
              ; ACK
              (niv=0)
    [  0.014] recv (stream_id=13) :status: 404
    [  0.014] recv (stream_id=13) server: nghttpd nghttp2/1.27.0-DEV
    [  0.014] recv (stream_id=13) date: Fri, 23 Mar 2018 17:31:10 GMT
    [  0.014] recv (stream_id=13) content-type: text/html; charset=UTF-8
    [  0.014] recv (stream_id=13) content-length: 151
    [  0.014] recv HEADERS frame <length=71, flags=0x04, stream_id=13>
              ; END_HEADERS
              (padlen=0)
              ; First response header
    <html><head><title>404 Not Found</title></head><body><h1>404 Not Found</h1><hr><address>nghttpd nghttp2/1.27.0-DEV at port 8080</address></body></html>[  0.014] recv DATA frame <length=151, flags=0x01, stream_id=13>
              ; END_STREAM
    [  0.015] send GOAWAY frame <length=8, flags=0x00, stream_id=0>
              (last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[])
    

    相关文章

      网友评论

          本文标题:(一) HTTP 版本 及 报文结构

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