结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议
摘要:
本文简单介绍了Web应用层协议理论知识,详细讲述了HTTP请求报文和响应报文各个字段含义,并从Wireshark俘获分组中选取HTTP相关报文进行分析。
一、概述
Web的应用层协议是超文本传输协议HTTP,HTTP协议由两部分程序实现:客户机程序、服务器程序,协议定义了这些报文的格式以及客户机和服务器如何进行报文交换的。Web服务器用于存储Web对象,每个对象由URL寻址,Web客户机通常指浏览器。浏览器向服务器发出对Web页中所包含对象的HTTP请求报文,服务器接受请求并用包含这些对象的HTTP响应报文进行响应。Web页是由对象组成,对象简单来说就是文件(如图形文件、Java小程序、声音剪辑文件),这些文件通过一个URL地址寻址。Web页通常含有一个基本的HTML文件和几个引用对象。
HTTP报文有两种:请求报文、响应报文。
二、HTTP请求报文
2.1 请求报文
整个报文段内容是普通ASCII文本,各个字段靠空格或者回车换行符隔开,如下图:

图1 HTTP请求报文格式
方法
表1 HTTP请求报文方法[1]
|
方法 |
说明 |
|
GET |
请求获取URL所标识的资源 |
|
POST |
在URL所标识的资源后附加新的数据 |
|
HEAD |
请求获取由URL所标识的资源的响应消息报头,常用于故障跟踪 |
|
PUT |
请求服务器存储一个资源,并用URL作为其标识 |
|
DELETE |
请求服务器删除URL所标识的资源 |
|
TRACE |
请求服务器回送收到的请求信息,主要用于测试或诊断 |
|
CONNECT |
保留将来使用 |
|
OPTIONS |
请求查询服务器的性能,或者查询与资源相关的选项和需求 |
使用GET方法时实体主体为空。客户机有时候需要提交表单(如搜索关键词),有两种方法可以做到这一点:其一,使用POST方法,实体主体包含表单字段的值;其二,用GET方法,此时表单的字段与原URL形成新的URL。
注:HTTP/1.0规约仅有三种方法:GET、POST、HEAD。
URL
对象由统一资料定位器URL标识,URL由3部分组成(如http://www.baidu.com/index.html):协议(http)、存放对象服务器主机名(www.baidu.com)、对象的路径名(/index.html)。
版本
目前有HTTP/1.0、HTTP/1.1,后者兼容前者。HTTP/1.0仅支持非持续连接,即每个TCP连接在服务器返回对象后关闭,HTTP/1.1支持持续连接,即服务器在发送响应后保持该TCP连接。早期,Web页面通常只包含HTML文件,用非持续连接就够了。如今,一个Web页面包含许多对象,用非持续连接开销太大了(TCP建立的三次握手),因此持续连接更合适。
首部行
给服务器发送首部行旨在服务器为不同类型的客户机发送相同对象的不同版本,常用的首部行见表2。
表2 HTTP请求报文常用首部行
|
字段名 |
值 |
|
User-Agent |
关于浏览器和它的平台信息 |
|
Accept |
客户机能处理的页面类型 |
|
Accept-Charset |
客户机可以接受的字符集 |
|
Aceept-Encoding |
客户机能处理的页面编码方法 |
|
Accept-Language |
客户机能处理的自然语言 |
|
Host |
服务器的DNS名字 |
|
Authorization |
证明客户端有权查看某个资源 |
|
Cookie |
将一个以前设置的cookie送回给服务器 |
实体数据
实体数据是报文的主体,即所请求的对象本身。
2.2 实例分析

图2 HTTP请求报文实例
三、HTTP响应报文
3.1 报文格式

图3 HTTP响应报文格式
版本
服务器使用的协议版本。
状态编码、短语
状态编码码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值[1]:
表3 HTTP响应报文响应类别及值
|
类别 |
值 |
|
1xx |
指示信息--表示请求已接收,继续处理 |
|
2xx |
成功--表示请求已被成功接收、理解、接受 |
|
3xx |
重定向--要完成请求必须进行更进一步的操作 |
|
4xx |
客户端错误--请求有语法错误或请求无法实现 |
|
5xx |
服务器端错误--服务器未能实现合法的请求 |
常见状态代码、状态描述、说明:
表4 HTTP响应报文常用代码
|
编码 |
短语 |
说明 |
|
200 |
OK |
客户端请求成功 |
|
400 |
Bad Request |
客户端请求有语法错误,不能被服务器所理解 |
|
401 |
Unauthorized |
请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 |
|
403 |
Forbidden |
服务器收到请求,但是拒绝提供服务 |
|
404 |
Not Found |
请求资源不存在 |
|
500 |
Internal Server Error |
服务器发生不可预期的错误 |
|
503 |
Server Unavailable |
服务器当前不能处理客户端的请求,一段时间后,可能恢复正常 |
首部行
常用的HTTP响应报文首部行见下表:
表5 响应报文常用首部行字段
|
字段名 |
值 |
|
Date |
消息被发送时的日期和时间 |
|
Server |
关于服务器信息 |
|
Content-Encoding |
内容是如何被编码的(如gzip) |
|
Content-Length |
以字节计算的页面长度 |
|
Content-Type |
页面的MIME类型 |
|
Last-Modified |
页面最后被修改的时间和日期 |
|
Location |
指标客户将请求发送到别处的命令 |
|
Accept-Ranges |
服务器将接受指定请求的字节范围 |
|
Set-Cookie |
服务器希望客户保存一份cookie |
实体数据
实体数据是报文的主体,即所请求的对象本身。
3.2 报文实例

图2 HTTP响应报文实例
至此,服务器返回用户所请求的文件:-)
参考资料:
[1] 博文《HTTP协议详解》
[2] Andrew S.Tanenbaum.计算机网络[M].
[3] 《计算机网络--自顶向下方法与Internet特色》[M].
from:http://blog.chinaunix.net/uid-9112803-id-3212057.html
结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议的更多相关文章
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之DNS协议
摘要: 本文简单介绍了DNS协议理论知识,给出URL解析步骤,详细讲述了DNS报文各个字段含义,并从Wireshark俘获分组中选取DNS相关报文进行分析. 一.概述 1.1 DNS ...
- 结合Wireshark捕获分组深入理解TCP/IP协议栈
摘要: 本文剖析了浏览器输入URL到整个页面显示的整个过程,以百度首页为例,结合Wireshark俘获分组进行详细分析整个过程,从而更好地了解TCP/IP协议栈. 一.俘获分组 1.1 准 ...
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
摘要: 本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠 ...
- 结合Wireshark捕获分组深入理解TCP/IP协议之以太网帧
摘要: 本文摘抄并整理了以太网相关理论知识,包括CSMA/CD协议机制及工作.LAN互连,详细分析了Ethernet II帧格式,最后给出Ethernet II帧实例. 一.以太网[1] 1. ...
- 结合Wireshark捕获分组深入理解TCP/IP协议之IP协议
摘要: 本文简单介绍了网络层理论知识,详细讲解了IP数据报各个字段,并从Wireshark俘获分组中选取IP数据报进行分析,也阐述了分组和分片的区别. 一.IPv4数据报 网络层是 ...
- 理解TCP/IP协议栈之HTTP2.0
1 前言 前面写了10多篇关于Redis底层实现.工程架构.实际应用的文章,感兴趣的读者可以进行阅读,如有问题欢迎交流: 1.Redis面试热点之底层实现篇-12.Redis面试热点之底层实现篇-23 ...
- 面试热点|理解TCP/IP传输层拥塞控制算法
0x00.前言 通过本文你将了解到以下内容: 拥塞控制概念以及其背景 流量控制和拥塞控制的区别与联系 拥塞控制主要过程详解 伙伴们认真学习一下,让offer来得更猛烈些吧! 0x01.TCP/IP协议 ...
- 【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md
前言 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API).那TCP/IP又是什么呢?TCP/IP是ISO/OS ...
- 深入浅出理解 TCP/IP 协议 (一)
文章转自:https://www.cnblogs.com/onepixel/p/7092302.html TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入 ...
随机推荐
- HDU 2633 Getting Driving License(模拟)
Getting Driving License Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- myBatis通过逗号分隔字符串,foreach
前言 当数据库里存储的值是以逗号分隔格式存储的字符串时. 数据格式如下: id name ids 1 张三 a,b,c 2 李四 c,d,e 我们拿到的条件参数是:b,e 1.后台通 ...
- 云服务器查看外网ip
curl ip.6655.com/ip.aspx curl whatismyip.akamai.com wget -qO - ifconfig.co curl icanhazip.com dig +s ...
- VitrualBox虚拟机设置网络桥接方式与windows互相ping通
一.VitrualBox 选择桥接模式 由于公司服务器对MASK地址访问外网有严格的限制,所以虚拟机里边的HWaddr mask地址没有加入公司的服务器的路由表里边,所以访问不了外网,而网络转换地址( ...
- hdu5308 I Wanna Become A 24-Point Master(构造)
题目:pid=5308" target="_blank">http://acm.hdu.edu.cn/showproblem.php? pid=5308 题意:给定 ...
- OpenGL核心技术之混合技术
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者.国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- ubuntu网络重启后或主机重启后,/etc/resolv.conf恢复原样的解决办法
ubuntu网络重启后或主机重启后,/etc/resolv.conf恢复原样的解决办法 /etc/resolv.conf中设置dns之后每次重启该文件会被覆盖,针对这种情况找了一些个解决方法 防止/e ...
- TimePickerDialog -下划线颜色修改
首先就是去framework下去找与之相关的theme属性 最开始的时候,直接找的是<item name="datePickerStyle">@style/Widget ...
- vue.js有什么用,是用来做什么的(整理)
vue.js有什么用,是用来做什么的(整理) 一.总结 一句话总结:用数据绑定的思想,vue可以简单写单个页面,也可以写一个大的前端系统,也可以做手机app的界面. 1.Vue.js是什么? 渐进式框 ...
- 1.25 Python知识进阶 - 封装
封装 示例代码: class Role(object): count = 0 def __init__(self,name,role,weapon,life_value=100,money=15000 ...