HTTP 协议报文解析
说明转载自https://blog.csdn.net/chf1142152101/article/details/74162755
本篇主要是为了记录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数据格式一样(包括响应数据的格式)。
Enjoytoday,Enjoycoding
HTTP 协议报文解析的更多相关文章
- 实验六 TLS协议报文解析
一.实验目的 1.访问一个https://....的网站,捕TLS包并分析报文序列. 2.分析连接建立的完整过程,如:TCP三次握手.SSL安全连接,使用TLS协议连接.协商过程,加密传送的状态.TC ...
- 基于DPI(深度报文解析)的应用识别
一.概述 1.DPI(Deep packet inspection,深度报文解析) 所谓“深度”是和普通的报文分析层次相比较而言的,“普通报文检测”仅分析IP包4 层以下的内容,包括源地址.目的地址. ...
- TCP协议 状态解析和状态统计
一.三次握手和四次挥手 1.建立连接(三次握手) (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器. (2)服务器端回应客户端的请求,这是三次握手中的第2个报 ...
- 报文解析及CRC类
/// <summary> /// 报文解析转换类 /// </summary> public class DatagramConvert { public static En ...
- ISO8583报文解析
在此只写了一个8583报文的拆包,组包其实也差不多的. 不多说直接上文件, 具体思路过程,在解析类里面写的有. 其中包含了四个文件 8583resp.txt报文 ISO8583medata配置文件 B ...
- HTTP协议报文格式
HTTP协议报文格式 接下来我们看看HTTP协议(Hypertext Transfer Protocol――超文本传输协议)浏览器端(客户端)向WEB服务器端访问页面的过程和HTTP协议报文的格式. ...
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
C# 串口操作系列(4) -- 协议篇,文本协议数据解析 标签: c#uiobjectstringbyte 2010-06-09 01:50 19739人阅读 评论(26) 收藏 举报 分类: 通讯 ...
- RTP协议全解析(H264码流和PS流)(转)
源: RTP协议全解析(H264码流和PS流)
- html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件
html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件
随机推荐
- codeforces437C
The Child and Toy CodeForces - 437C On Children's Day, the child got a toy from Delayyy as a present ...
- 计算机cpu、寄存器、内存区别
1.寄存器是中央处理器内的组成部份.它跟CPU有关.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC). ...
- POI 生成excel(大数据量) SXSSF
使用POI 的SXSSF (Streaming Usermodel API)生成较大的excel,同时开启压缩 import junit.framework.Assert; import org.ap ...
- hdu 6406 Taotao Picks Apples (2018 Multi-University Training Contest 8 1010)(二分,前缀和)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6406 思路: 暴力,预处理三个前缀和:[1,n]桃子会被摘掉,1到当前点的最大值,1到当前点被摘掉的桃子的 ...
- 洛谷P2054 [AHOI2005]洗牌(扩展欧几里德)
洛谷题目传送门 来个正常的有证明的题解 我们不好来表示某时刻某一个位置是哪一张牌,但我们可以表示某时刻某一张牌在哪个位置. 设数列\(\{a_{i_j}\}\)表示\(i\)号牌经过\(j\)次洗牌后 ...
- Java新AIO/NIO2:AsynchronousServerSocketChannel和AsynchronousSocketChannel简单服务器-客户端
Java新AIO/NIO2:AsynchronousServerSocketChannel和AsynchronousSocketChannel简单服务器-客户端用AsynchronousServerS ...
- HGOI 20180224 题解
/* The Most Important Things: ljc chat with fyh on QQTa说期末考Ta数学74分感觉不好但是我觉得fyh是地表最强的鸭~~(of course en ...
- random模块(十九)
1 ).random() 返回0<=n<1之间的随机实数n: 2 ).choice(seq) 从序列seq中返回随机的元素: 3 ).getrandbits(n) 以长整型形式返回n个随机 ...
- Pentaho data integration(kettle) 在Mac上启动不了
环境 MacOS Mojave (10.14.1) Pentaho Data Integration 8.2 Java 8 现象 从官方下载下来最新的安装包,解压之后,双击Data Integrati ...
- MySQL索引原理及慢查询优化-来自美团网的技术blog(写的深入浅出)
MySQL索引原理及慢查询优化 转:http://tech.meituan.com/mysql-index.html MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首 ...