HTTP 协议报文解析

2023-05-16

本篇主要是为了记录HTTP中报文的格式,以便针对报文进行解析。首先会介绍基础的HTTP报文,之后会介绍 

文件上传时的数据报文格式.

 

HTTP基础报文格式

 

按照HTTP报文类型进行介绍,HTTP报文类型分为请求报文(客户端主动请求报文)和响应报文(服务端响应客户端的回传报文)。其基本的格式为:

 

GET / HTTP/1.1

Host: www.enjoytoday.cn

Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Referer: http://www.enjoytoday.cn/posts/326

Accept-Encoding: gzip, deflate, sdch

Accept-Language: zh-CN,zh;q=0.8

Cookie: bdshare_firstime=1466032270994; UM_distinctid=15c4ef2ac4e2e4-0d13269271b947-1b2a120b-1fa400-15c4ef2ac4f7b5; un=aGZjYWk=; comment_author=aGZjYWk=; comment_author_email=1710600212@qq.com; comment_author_url=http://www.enjoytoday.cn; c_id=dUhIaTlndmc4MVVYbjRQTGxMRTotMTpFODg3QjgzQjg1NjgxQjQxRUYxNjg2QzJFRkMyQjI2QQ==; JSESSIONID=ADBC8C3DADF6C815D778450C193C6637.ajp13_worker; Hm_lvt_ce55bfda158556585a8b7b246346c8ba=1498560244,1498739070,1498833193,1498917432; Hm_lpvt_ce55bfda158556585a8b7b246346c8ba=1498917597; CNZZDATA1262047894=1598545996-1495973145-%7C1498917578

 

username=hfcai&sex=man

 

1) 请求报文

 

请求报文数据格式由三个部分组成:

 

请求方法、URI、HTTP协议版本

 

该部分位于数据首行,基本格式为:

 

GET /index.html HTTP/1.1

1

该部分给出了请求类型和请求的资源位置(/index.html),其中HTTP中的请求类型包括:GET、POST、HEAD、PUT、DELETE.一般常用的为POST和GET方式。

 

请求头部

 

该部分紧跟着上一部分(方法、协议版本行),该部分主要是用于描述请求正文,其基本格式如下:

 

Host: www.enjoytoday.cn

Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36

......

 

主要是用于说明请求源、连接类型、以及一些Cookie信息等。

 

请求正文

 

请求正文和请求头部通过一个空行进行隔开,一般用于存放POST请求类型的请求正文,如上的请求体为:

 

username=hfcai&sex=man

1

2)响应报文

 

响应报文和请求报文格式类型,同样也是分为三个部分,响应头部和响应体同样也是通过一个空行进行隔开,如下为一个简单的示例:

 

HTTP/1.1 200 OK

  Date: Sat, 01 Jul 2017 14:51:26 GMT

  Server: Apache/2.4.7 (Ubuntu)

  Set-Cookie: JSESSIONID=84C993F5E433C4DE9BFBA57150FFC065.ajp13_worker;path=/;HttpOnly

  Content-Language: zh-CN

  Vary: Accept-Encoding

  Content-Encoding: gzip

  Content-Length: 7333

  Keep-Alive: timeout=5, max=100

  Connection: Keep-Alive

  Content-Type: text/html;charset=UTF-8

 

  <html>

  <head>

  <title>title of html.</html>

  </head>

  <body>

  <h1>Hello world!</h1>

  </body>

  </html>

 

状态码部分

 

该部分主要给出响应HTTP协议版本号、响应返回状态码、响应描述,同样是单行显示.格式为:

 

HTTP/1.1 200 OK

1

响应返回一般由一个三位数组成,分别以整数1~5开头组成。各个类型响应对应含义:

 

1XX:信息提示,临时的响应

2XX:请求成功,服务端已经接受到请求信息

3XX:重定位

4XX:客户端异常

5XX:服务端异常 

常见的响应有:200(响应成功),400(请求异常,一般为参数异常),404(请求资源不存在),405(请求方式不支持),500(服务器内部异常)

响应头部

 

响应头部主要是返回一些服务器的基本信息,以及一些Cookie值等。如上的响应头为:

 

Date: Sat, 01 Jul 2017 14:51:26 GMT

Server: Apache/2.4.7 (Ubuntu)

Set-Cookie: JSESSIONID=84C993F5E433C4DE9BFBA57150FFC065.ajp13_worker;path=/;HttpOnly

Content-Language: zh-CN

Vary: Accept-Encoding

Content-Encoding: gzip

Content-Length: 7333

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html;charset=UTF-8

 

响应体

 

该部分为请求需要得到的具体数据,可以为任何类型数据,一般网页浏览返回的为html文件内容.如上,内容不再列出。同样,和响应头部通过一个空行进行隔开。

 

文件上传报文格式

 

如下,介绍通过浏览器上传文件时它的报文格式和一般的报文的异同。文件上传主要在于文件上传时的格式差异,如下给出一个示例的格式:

 

POST /servlet/UploadServlet HTTP/1.1

Host: localhost:8080

Connection: keep-alive

Content-Length: 349

Cache-Control: max-age=0

Origin: http://localhost:8080

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryy4ceMstxB6tXIWBT

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Referer: http://localhost:8080/hello.html

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.8

Cookie: comment_author="aGZjYWk="; comment_author_email="1710600212@qq.com"; comment_author_url="http://localhost:8080"; UM_distinctid=15c4ef587620-0ad25ac342d545-1b2a120b-1fa400-15c4ef58763717; CNZZDATA1262047894=628334530-1495973332-%7C1495973678; Hm_lvt_ce55bfda158556585a8b7b246346c8ba=1495973333

 

------WebKitFormBoundaryy4ceMstxB6tXIWBT

Content-Disposition: form-data; name="filedata"; filename="test.txt"

Content-Type: text/plain

 

This is the upload file

this is a test file

this is a text file

 

------WebKitFormBoundaryy4ceMstxB6tXIWBT

Content-Disposition: form-data; name="submit"

 

upload

------WebKitFormBoundaryy4ceMstxB6tXIWBT--

 

如上,我上传了一个测试文件(test.txt),其文件内容为:

 

This is the upload file

this is a test file

this is a text file

 

其基本格式还是遵循HTTP的请求格式,但对于正文部分添加了一些对于上传文件的说明,格式如下:

 

POST /servlet/UploadServlet HTTP/1.1    #请求uri、方法

Host: localhost:8080Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryy4ceMstxB6tXIWBT    #边界值

......

Accept-Language: zh-CN,zh;q=0.8

 

------WebKitFormBoundaryy4ceMstxB6tXIWBT                   #边界

Content-Disposition: form-data;name="filedata";filename="test.txt" #文件基本信息

Content-Type: text/plain                              #文件基本信息           

 

This is the upload file                               #文件内容    

this is a test file

this is a text file

 

------WebKitFormBoundaryy4ceMstxB6tXIWBT       #提交按钮属性信息部分

Content-Disposition: form-data; name="submit"

 

upload                                        #提交按钮value值                

------WebKitFormBoundaryy4ceMstxB6tXIWBT--

 

其他部分和一般的HTTP数据格式一样(包括响应数据的格式)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP 协议报文解析 的相关文章

  • 图像的色彩类别,灰度化,二值化

    灰度化 xff1a 在RGB模型中 xff0c 如果R 61 G 61 B时 xff0c 则彩色表示一种灰度颜色 xff0c 其中R 61 G 61 B的值叫灰度值 xff0c 因此 xff0c 灰度图像每个像素只需一个字节存放灰度值 xf
  • 服务器与客户端概念

    比如说 xff0c 你浏览百度的网页 xff0c 你的电脑就是客户端 xff0c 而百度网页所存放的机器就是服务器 你通过internet互联网连到百度网页服务器 xff0c 才能浏览网页 再比如说 xff0c 你玩网络游戏 xff0c 你
  • 图像灰度图,直方图,像素通道问题

    1 图像直方图概述 直方图广泛运用于很多计算机视觉运用当中 xff0c 通过标记帧与帧之间显著的边缘和颜色的统计变化 xff0c 来检测视频中场景的变化 在每个兴趣点设置一个有相近特征的直方图所构成 标签 xff0c 用以确定图像中的兴趣点
  • 深入浅出的讲解傅里叶变换(真正的通俗易懂)

    我保证这篇文章和你以前看过的所有文章都不同 xff0c 这是 2012 年还在果壳的时候写的 xff0c 但是当时没有来得及写完就出国了 于是拖了两年 xff0c 嗯 xff0c 我是拖延症患者 这篇文章的核心思想就是 xff1a 要让读者
  • 理解图像傅里叶变换的频谱图

    很多人都不了解图像 xff08 二维 xff09 频谱中的每一点究竟代表了什么 xff0c 有什么意义 一句话解释为 xff1a 二维频谱中的每一个点都是一个与之一 一对应的二维正弦 余弦波 视觉的优势永远大于其他器官对人的作用 xff0c
  • 机器视觉自动数据标注方法

    目录 一 背景阅读 个人总结 xff1a xff08 半 xff09 自动数据标注的方法基本都是采用类似的思路 xff0c 即通过少量标注数据进行训练后得到一个预训练模型 xff0c 然后再次基础上对该网络的输出结果进行人工核验 xff0c
  • 理解图像的傅里叶变换

    最近在看图像的傅里叶变换 xff0c 看着频谱图一直没看明白到底为啥是那样的 xff0c 跟同学研究了好久 xff0c 终于想明白了 感谢同学的耐心指导 xff01 大家相互讨论真的很快就能出结果 xff0c 多讨论 xff0c 多学习 图
  • 快速傅里叶变换(FFT)详解

    快速傅里叶变换 xff08 FFT xff09 详解 xff08 这是我第一次写博 xff0c 不喜勿喷 xff09 关于FFT已经听闻已久了 xff0c 这次终于有机会在Function2的介绍下来了解一下FFT了 快速傅里叶变换 Fas
  • 图像处理:如何理解傅里叶变换在图像处理中的应用

    声明 xff1a 这篇文章的主要目的是通过建立一维傅里叶变换与图像傅里叶变换中相关概念的对应关系来帮助读者理解图像处理中的离散傅里叶变换 xff0c 因此 xff0c 理解图像中离散傅里叶变换的前提条件是读者需要了解一维傅里叶变换的基本知识
  • 图像处理中的傅里叶变换和频率域滤波概念

    写在前面的话 作者是一名在读的硕士研究僧 xff0c 方向是机器视觉 由于视觉是一门相对复杂的学科 xff0c 作者在课堂上学到的东西只是非常浅显的内容 xff0c 我们老师说是 xff0c 领我们进了个门 现在打算利用图书馆和网络上的资源
  • 图像处理的傅里叶变换理解

    傅立叶变换在图像处理中有非常非常的作用 因为不仅傅立叶分析涉及图像处理的很多方面 xff0c 傅立叶的改进算法 xff0c 比如离散余弦变换 xff0c gabor与小波在图像处理中也有重要的分量 印象中 xff0c 傅立叶变换在图像处理以
  • 傅里叶变换分类

    傅里叶变换 傅里叶变换 xff08 Fourier transform xff09 是一种线性的积分变换 xff0c 从时间转换为频率的变化 1 1 连续傅里叶变换 这是将频率域的函数F 表示为时间域的函数f xff08 t xff09 的
  • C++实现二维离散傅里叶变换

    在上一篇文章 C 43 43 实现一维离散傅里叶变换 中 xff0c 我们介绍了一维信号傅立叶变换的公式和C 43 43 实现 xff0c 并阐述了频域幅值的意义 一维傅立叶变换只适用于一维信号 xff0c 例如音频数据 心脑电图等 在图像
  • MFC显示JPG,bmp图片

    主要代码如下 xff1a 方法说明 显示JPG和GIF BMP图片 参数说明 CDC pDC 设备环境对象 参数说明 CString strPath 要显示的图片路径 参数说明 int x 要显示的X位置 参数说明 int y 要显示的Y位
  • MFC关于JPG图片显示处理的几个方式

    做远程视频监控项目 xff0c 接触较多图片处理方面问题 xff0c 作为学习做以下记录 xff1a 一 截图默认bmp格式转jpg压缩 采用jpglib库去实现 二 jpg图片接收后MFC显示 四种方式 MFC提供的CWnd只有默认加载B
  • opencv学 之图像傅里叶变换dft

    一 前言 接触了图像的傅里叶变换 xff0c 数学原理依旧不是很懂 xff0c 因此不敢在这里妄言 下午用Opencv代码实现了这一变换 xff0c 有一些经验心得 二 关键函数解析 2 1copyMakeBorder 扩展图片尺寸 傅里叶
  • UML轻松入门之动态建模

    在UML中 xff0c 静态建模可以描述系统的组织结构 xff0c 而动态建模则可以描述系统的行为和动作 在动态建模机制中 xff0c 以消息完成对象之间的交互 xff0c 用状态图 顺序图 协作图和活动图来描述系统的行为 消息 在面向对象
  • C++实现 (FFT)一维快速傅里叶变换

    一维离散傅里叶变换的公式为 xff1a 如果直接基于该定义进行编程实现 xff0c 则算法时间复杂度为O N2 具体的编程实现我们已经在 C 43 43 实现一维离散傅里叶变换 中介绍过了 当一维信号长度达到几十万个信号时 xff0c 当前
  • 信号傅里叶变换后的实数和虚数部分理解

    傅里叶 xff08 FFT DFT 傅立叶 Fourier xff09 傅里叶变换的结果为什么含有复数 xff1f 为什么傅里叶变换的结果含有复数成份 xff1f 看了很多关于FFT的资料 xff0c 现在看到一个资料说FFT转换的结果是实
  • 从头到尾彻底理解傅里叶变换算法

    http www xuebuyuan com 2052774 html 经典算法研究系列 xff1a 十 从头到尾彻底理解傅里叶变换算法 上 作者 xff1a July dznlong 二零一一年二月二十日 推荐阅读 xff1a The S

随机推荐

  • 一维傅里叶变换后的复数怎样理解?

    我刚开始学傅氏变换也有这样的疑问 xff01 首先回答问题一 xff1a 为什么一个实信号经过傅氏变换后 xff0c 再反变换回来得到的是一个复数 这是由于matlab计算引起的 xff0c 你在计算傅氏反变换后引入了复数 xff0c 最后
  • 二维傅里叶变换是怎么进行的?

    1 首先回顾一下一维FT 通俗来讲 xff0c 一维傅里叶变换是将一个一维的信号分解成若干个三角波 对于一个三角波而言 xff0c 需要三个参数来确定它 xff1a 频率 幅度 A xff0c 相位 因此在频域中 xff0c 一维坐标代表频
  • 傅里叶变换和逆傅里叶变换numpy

    理论基础 时域 xff1a 以时间为横坐标 频域 xff1a 以频率的倒数为横坐标 xff0c 可以看出 xff0c 频域更加简单 相位 xff1a 与时间差有关的一个概念 傅里叶说 xff0c 任何连续周期信号 xff0c 可以由一组适当
  • 复数的物理意义

    很不错的文章 xff01 xff01 复数最直观的理解就是旋转 xff01 4 i i 61 4 就是 4 在数轴上旋转了180度 那么4 i就是旋转了90度 另外 xff0c e t是什么样呢 xff1f 但当你在指数上加上i之后呢 xf
  • 动态初始化一维数组详解

    动态初始化一维数组 1 动态初始化一维数组 xff0c 会在堆内存中分配这个数组 并且数组中每一个元素都采用默认值 byte short int long 0 float double 0 0 boolean false char u000
  • c语言之 malloc函数详解 在堆中动态分配内存malloc和new的区别

    一 原型 xff1a extern void malloc unsigned int num bytes 头文件 xff1a include lt malloc h gt 或 include lt alloc h gt 注意 xff1a a
  • 8086汇编与c++编译器就内存方面的感想

    8086汇编中可以手动分配栈内存 xff0c 没有堆内存的概念 xff0c 而c 43 43 编译器中栈是系统分配的 xff0c 堆是手动分配的
  • 2-NoSQL(非关系型数据库)-入门概述

    1 NoSQL是什么 xff1f NoSQL xff08 Not only SQL xff0c 不仅仅是数据库 xff09 xff0c 泛指非关系型数据库数据库 xff0c 其数据存储不需要固定的模式 xff0c 无需多余操作就可以横向扩展
  • 指针类型和指针类型转换的理解

    前几天在判断 值相同的两个指针所指向的变量的值可以不同 这句话时 xff0c 发现自己对指针类型一些概念仅仅是记住了结论 于是查阅了一些资料 xff0c 记录一下一些与指针类型和指针类型转化相关的知识 一些用到的 开始之前 xff0c 先来
  • 指针的动态初始化malloc与销毁free

    指针动态初始化 xff1a int p 61 int malloc sizeof int 3 初始化为指向3个元素的数组 if p exit 1 这个地方一定要进行判断 xff0c 因为若动态初始化不成功 xff0c 在使用p 0 p 1
  • C++ 简单实现HTTP GET/POST 请求

    HTTP 超文本传输协议 是一种客户端与服务端的传输协议 xff0c 最早用于浏览器和服务器之间的通信 xff0c 后来因为其使用灵活 方便等特点 xff0c 广泛用于客户端与服务端的通信 文章将简单介绍HTTP协议 xff0c 同时以C
  • c#的http服务器和客户端实例

    sever xff1a 业务逻辑 using System using System Collections using System IO using System Net using System Net Sockets using S
  • c++简单实现http协议服务器和客户端

    C 43 43 简单实现HTTP GET POST 请求 HTTP 超文本传输协议 是一种客户端与服务端的传输协议 xff0c 最早用于浏览器和服务器之间的通信 xff0c 后来因为其使用灵活 方便等特点 xff0c 广泛用于客户端与服务端
  • C/C++ http协议发送字段,文件,单个和多张图片

    关于c c 43 43 网络编程 xff0c 无论在linux还是windows 要说到自由性 xff0c 和安全性 xff0c socket无疑是比较好的 xff01 对于socket 因为它的传输协议只有两种tcp和udp 属于网络层
  • C# http 发送文件和接收文件的代码。

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
  • 图片与Byte相互转换,文件和字节流的转换方法

    lt summary gt 文件转化成byte 数组 lt summary gt lt param name 61 34 fileName 34 gt lt param gt lt returns gt lt returns gt priv
  • C++中使用TCP传文件

    在两个文件中都定义文件头和用到的宏 xff1a define MAX SIZE 10 define ONE PAGE 4096 struct FileHead char str 260 int size 在客户端发送接收阶段 xff1a 1
  • 理解协程并搞定协程相关面试题

    一 什么是协程 协程 xff1a 实现协作式多任务 xff0c 可以在程序执行内部中断 xff0c 转而执行其他协程 比如我们编写子程序 xff08 或者说函数 xff09 xff0c 通常是利用 调用 来实现从 A 跳去 B xff0c
  • C# 对象与JSON字符串互相转换的三种方式

    JSON JavaScript Object Notation JS 对象标记 是一种轻量级的数据交换格式 关于内存对象和JSON字符串的相互转换 xff0c 在实际项目中应比较广泛 xff0c 经过一番搜索 xff0c 找到如下三种方法来
  • HTTP 协议报文解析

    本篇主要是为了记录HTTP中报文的格式 xff0c 以便针对报文进行解析 首先会介绍基础的HTTP报文 xff0c 之后会介绍 文件上传时的数据报文格式 HTTP基础报文格式 按照HTTP报文类型进行介绍 xff0c HTTP报文类型分为请