HTTP 报文结构

作者: lucy_ | 来源:发表于2016-10-15 23:51 被阅读1784次

    HTTP 报文有 请求报文响应报文 两种。
    请求报文:从客户向服务器发送请求报文。
    响应报文:从服务端到客户的回答。

    由于 HTTP 是面向文本的,因此在报文中的每一个字段都是一些 ASCII 码串,因此各个字段的长度是不确定的。
    这也造成了 HTTP 报文结构的统一性,不然无法解析出数据。

    HTTP的这两种报文都由三部分组成:开始行首部行实体主体

    开始行

    区分请求报文响应报文

    请求报文的开始行

    也叫请求行,由 方法[空格]URL[空格]HTTP版本 组成。

    方法: 向请求资源指定的资源发送请求报文的方法,其作用是可以指定请求的资源按期望产生某种行为。
    URL : 链接
    HTTP版本:目前有 HTTP/1.0、HTTP/1.1、HTTP/2.0 版本,其中 HTTP1.0 版本使用较广泛。

    以下为 HTTP/1.0 和 HTTP/1.1 支持的方法:

    方法 说明 支持的HTTP协议版本 请求行例子
    GET 获取资源 1.0、1.1 GET /csrfToken HTTP/1.1
    POST 传输实体主体 1.0、1.1
    PUT 传输文件 1.0、1.1
    HEAD 获得报文首部 1.0、1.1
    DELETE 删除资源 1.0、1.1
    OPTIONS 询问支持的方法 1.1
    TRACE 追踪路径 1.1
    CONNECT 由于代理服务器 1.1
    LINK 建立和资源之间的联系 1.0
    UNLINK 断开连接关系 1.0

    响应报文的开始行

    也叫响应行,由 HTTP 版本[空格]状态码组成。

    状态码(Status-Code)都是三位数字的,分为 5 大类共 33 种。
    如:

    状态码 说明 请求行例子
    1xx 表示通知信息的,如请求收到了或正在进行处理
    2xx 表示成功 HTTP/1.1 200 OK
    3xx 表示重定向
    4xx 表示客户端的差错,如请求链接为不存在 HTTP/1.1 404 Not Found
    5xx 表示服务器的差错

    首部行

    1.是用来说明浏览器、服务器或报文主体的一些信息。
    2.可以有好几行,也可以不使用
    3.每个首部行都是由 首部字段名[空格] 组成
    4.每个首部行在结束地方都有 CRLF(『回车』和『换行』符)

    HTTP 首部字段分为 4 种: 通用首部字段请求首部字段响应首部字段实体首部字段

    一张图展示所有字段:


    HTTP 报文首部字段

    脑图链接:
    https://www.processon.com/view/link/58025201e4b0d6b27dd4c8af

    实体主体

    在请求报文中,一般是 post/put 提交的表单信息。与首部行之间有 CRLF 即空行。

    实例

    说了这么多,再上点例子来辅助理解。
    打开 chrome 控制台,点击 NetWork , 然后输入一个网址,回车,一般我们都会有这样的场面

    请求

    页面中有很多的请求,点击一个请求进去呢,比如第一个

    wan.meizu.com

    你会发现请求报文和响应报文都在图中,不过这些都是 chrome 浏览器为了我们方便查看,帮我们美化过了的。
    不知道你们是否有注意到 view source 字眼,点击看看

    HTTP 报文

    你会发现, 响应报文 和 请求报文就是上面讲的 HTTP 报文结构-- 开始行、首部行。

    而实体主体可以在 Request Headers 下面的 Request Payload 看到,下图是我编写这边文章时的自动保存的请求。大家可以自己尝试下。

    Request Payload

    下图是使用 wireshark 抓到这条请求的 HTTP 报文,蓝色框框部分就是实体主体。

    完整报文
    注意:实体主体与首部行隔一空行

    总结

    HTTP 报文有 请求报文响应报文 两种。
    HTTP的这两种报文都由三部分组成:开始行首部行实体主体
    开始行可用于区分两种报文。
    首部行都是由 首部字段名 组成,每个首部行在结束地方都有 CRLF
    首部行和实体主体间有 CRLF

    相关文章

      网友评论

      • 18b8cd182319:写的挺好的,已收藏:smile:
      • zlcook:常说的“请求体”和“响应体”是指什么?是实体主体吗?
        秦淮河的桨:我认为体就是body的翻译
      • zlcook:写的很好,图画的也很好,如果能介绍一下常用首部字段的使用就更好了 :blush:

      本文标题:HTTP 报文结构

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