• HTTP协议分析


    目录

    一、HTTP 基本请求与应答

    HTTP请求

    请求行 

    请求头

    请求正文

    HTTP响应

    响应行

    响应头

    响应正文

    Wireshark中加载保存的报文文件

    二、HTTP 协议对长文件的处理

    TCP报文段

    数据包 

    请求数据包

    响应数据包


    一、HTTP 基本请求与应答

    HTTP请求

    HTTP 请求包括三部分,分别是请求行(请求方法)、请求头(消息报头)和请求正文。HTTP 请求第三行为请求正文,请求正文是可选的,它最常出现在 post 请求方式中,get 请求无正文,所以回车之后为空。示例如下:

    请求行 

    由三部分构成:第一部分说明请求类型为 get 方法请求,第二部分(用/分开)是资源 URL,第三部分说明使用的是 HTTP1.1 版本。 GET /success.txt HTTP/1.1\r\n

    常见的请求方法如下图所示:

    其中用得最多的方法是 get 方法和 post 方法,二者的区别:

    1. get 直接在浏览器输入,post 需要工具发送请求;
    2. get 用 url 或者 cookie 传参,post 将数据放在 body 中;
    3. get 的 URL 有长度限制,post 数据可以非常大;
    4. post 比 get 安全,因为 URL 看不到数据;
    5. get 用来获取数据,post 用来发送数据。

    请求头

    请求头(消息头)包含(客户机请求的服务器主机名,客户机的环境信息等)。具体内容及含义如下:

    • Accept:用于告诉服务器,客户机支持的数据类型 (例如:Accept:text/html,image/*);
    • Accept-Charset:用于告诉服务器,客户机采用的编码格式;
    • Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式;
    • Accept-Language:客户机语言环境;
    • Host:客户机通过这个头,告诉服务器想访问的主机名;
    • If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间;
    • Referer:客户机通过这个头告诉服务器,它(客户端)是从哪个资源来访问服务器的(防盗链);
    • User-Agent:客户机通过这个头告诉服务器,客户机的软件环境(操作系统,浏览器版本等);
    • Cookie:客户机通过这个头,将 Coockie 信息带给服务器;
    • Connection:告诉服务器,请求完成后,是否保持连接;
    • Date:告诉服务器,当前请求的时间。

    请求正文

    浏览器端通过 HTTP 协议发送给服务器的实体数据。get 请求时,通过 url 传给服务器的值 name=dylan&id=110。post 请求时,通过表单发送给服务器的值。也可以为空。

    HTTP响应

    一个 HTTP 响应代表服务器端向客户端回送的数据,它包括:一个状态行,若干个消息头,以及实体内容。示例如下:

    响应行

    包括 HTTP 版本HTTP/1.1,状态码200,以及消息OK; 其中 HTTP 响应常见的状态码及其含义如下:

    响应头

    响应头有若干个字段组合(根据具体情况选择),常见字段及其含义如下:

    Content-Type:服务器给客户端传回来的文件格式;

    Content-Length:这个是返回的实体在压缩之之后的长度为 8 byte;

    Last-Modified:文档的最后改动时间;

    ETag:这个响应头中有种Weak Tag,值为W/“xxxxx”。它声明Tag是弱匹配的,只能做模糊匹配,在差异达到一定阈值时才起作用;

    Accept-Ranges:表示该服务器是否支持文件的范文请求;

    Server:设置服务器名称;

    Date:当前 GMT 时间,这个就是你请求的东西被服务器创建的时间。

    响应正文

    响应包含浏览器能够解析的静态内容,例如:HTML,纯文本,图片等等信息。

    Wireshark中加载保存的报文文件

    利用抓包软件 Wireshark 进行抓包,过滤出 HTTP 协议报文。如下图:

    查看报文内容:双击展开HTTP请求和响应报文的内容。如下图:

    为了避免网络原因带来的问题,完成任务时也可以通过加载以前保存的报文文件。如下图所示,在 Wireshark 的菜单中,依次单击“文件”-“打开”,选中需要加载的文件后,单击“打开”按钮文件中的报文就可以加载到 Wireshark 中,同样可以筛选出"HTTP"报文。

    二、HTTP 协议对长文件的处理

    TCP报文

    在以太网中,最大传输单元(MTU)为 1500 个字节,在一个 IP 包中,去除 IP 包头的 20 个字节,可以传输的最大数据长度为 1480 个字节。在 TCP 包中,去除 20 个 TCP 包头,可以传输的最大数据段为 1460 个字节。因此,当数据超过最大数据长度时,将对该数据进行分片处理,在 IP 包头中会看到有多个片在传输,但标识号是相同的,表示是同一个数据包。

    HTML 文件相当长时,例如: 4861 字节太大,一个 TCP 数据包不能容纳。因此,单个 HTTP 响应消息由 TCP 分成几个部分,每个部分包含在单独的 TCP 报文段中,如下图:长度为 4861 的报文被分为长度分别为 1440,1440,1440,541 的 4 个 TCP 段,编号分别为 8715,8716,8718,8719 。

    数据包 

    分为请求数据包和响应数据包:展开 HTTP 分组,查找浏览器发送的请求消息,所以此时我们捕捉到的只有 1 个请求消息。

    请求数据包

    单击 get 数据包,其内容包含:请求行,请求头,空行,请求体。

    响应数据包

    点开响应数据包,其状态码和短语都在此数据包里。并且其状态码为 200 ,短语为 OK :

    相应内容包括:状态行,响应头,空行,响应正文:

     

     

     

  • 相关阅读:
    11-注意力机制
    解决:yarn 无法加载文件 “C:\Users\XXXXX\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本“ 的问题
    VSCode 工具常用插件
    判断子序列[简单]
    全球十大即时通信软件最新排名
    (附源码)ssm招聘网站 毕业设计 250858
    C/C++数据结构之中缀表达式转换为后缀表达式,删除堆栈元素
    从一文中了解SSRF的各种绕过姿势及攻击思路
    web站点的欢迎页面
    emq连接认证,订阅发布权限控制
  • 原文地址:https://blog.csdn.net/qq_51165234/article/details/126722807