本篇主要是为了记录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数据格式一样(包括响应数据的格式)。

HTTP 协议报文解析相关推荐

  1. ModbusTCP协议报文解析

    ModbusTCP协议报文解析 报文格式 交互(通信)标识:2个字节 为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文. 协议标识:2个字节 表示该条指令遵循Modbus ...

  2. rtsp协议报文解析-首部字段解析

    前言 网上关于rtsp的文章很多,但大多是抽象的理论介绍,从理论学习到实际上手开发往往还有一段距离.然而,没有实际开发经验的支撑,理论又很难理解到位. 本系列文章将从流媒体协议的基础原理开始,通过抓包 ...

  3. 西门子PLC的S7协议报文解析说明

    我们以S7的1500系列来查看握手和读取.写入[字Word或者位Bit]命令报文 以下报文不做说明时都是十六进制字节. 西门子PLC需要连接成功后发送两次握手命令方可进行读写通信. 西门子PLC的S7 ...

  4. SL651协议报文解析(一)

    相关所需功能码枚举类请看上篇文章呦~ 先上一些报文方便大家测试解析: 下方都是一些上行报文,如需下行可以私信我 测试报: 7E 7E 10 00 51 14 19 10 00 7B 2F 00 08 ...

  5. matlab里的xcp报文,xcp协议报文解析

    AAddddiittiioonnaall ssooffttwwaarree XCP ((sseerrvviicceess)) ttoo bbee iinntteeggrraatteedd iinn t ...

  6. HTTP协议报文解析

    HTTP(HyperText Transfer Protocol,超文本传输协议) HTTP是一个应用层协议,虽然在2015年已推出HTTP/2版本,并被主要的web浏览器和web服务器支持.但目前使 ...

  7. TFTP协议报文解析

    IP数据报文: IP首部 + UDP报文 UDP报文: UDP首部 + TFTP数据报文 TFTP数据报文: 操作码 + 文件名 + 0 + 模式 + 0 TFTP报文: 2字节 x字节 1字节 x字 ...

  8. rtsp协议格式解析

    前言 网上关于rtsp的文章很多,但大多是抽象的理论介绍,从理论学习到实际上手开发往往还有一段距离.然而,没有实际开发经验的支撑,理论又很难理解到位. 本系列文章将从流媒体协议的基础原理开始,通过抓包 ...

  9. hj212协议如何和php通讯,HJ212数据传输标准报文解析

    HJ212分为2005年(HJ/T212-2005)和2017年(HJ212-2017)的版本,略有不同. 网上没找到非常官方的渠道下载,在这贴一份2017年版本的下载地址 TCP/IP通讯包组成 名 ...

最新文章

  1. 网站的服务器角色选哪个,原神平民开服选什么角色最好-开服必备角色推荐_好特网...
  2. 私有化预期终于落地,海尔智家将迎来更多可能!
  3. MVC、MVP、MVVM分别是什么?有什么区别?
  4. MFC窗口风格 WS_style/WS_EX_style
  5. 异形3×3魔方还原教程_【理论篇】三阶魔方4.33千亿亿种变化是怎么计算出来的?...
  6. 【原】简单shell练习(四)
  7. IntelliJ IDEA 连接数据库 详细过程
  8. Envoy实现.NET架构的网关(三)代理GRPC
  9. Java面试常问计算机网络问题
  10. java 发送16进制数据'_java 16进制数据递增
  11. 【干货】Kafka实现淘宝亿万级数据统计(上)
  12. java android长连接_基于Java Socket的自定义协议,实现Android与服务器的长连接(一)...
  13. Windows Mobile 7(Photon) 梦幻之旅系列-前言
  14. CreateDirectory和SHCreateDirectoryExW区别
  15. SAP License:家装ERP
  16. 微信文件夹下不可言说的秘密自动生成小视频文件
  17. i.MX 8M Mini sai_low_power_audio
  18. 浩方对战平台原理初步分析
  19. 英语后置定语语法归纳
  20. 删除流氓软件进程的方法

热门文章

  1. linux help命令编写,Linux shell命令帮助格式详解
  2. linux vim分屏函数,Linux学习笔记之十二————vim编辑器的分屏操作
  3. 开启应用的时候总是以管理员身份打开的解决方案
  4. for ie无效 in js_关于js中for in的缺陷浅析
  5. python 文件分割 按大小_python处理分隔大文件
  6. php 关闭oracle,CSS_ORACLE启动和关闭实例,实例启动和关闭:一.数 - phpStudy
  7. java带参数的构造方法_看了Java的Class的源码,我自闭了
  8. clang编译c语言,clang没有编译c程序?
  9. 电源开关上的 | 和 O 究竟代表了什么?
  10. 下一个嵌入式大神,难道不是你吗?