结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议
来源:互联网 发布:电影院简单数据库设计 编辑:程序博客网 时间:2024/04/23 21:29
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=9407839&id=3873897
原文地址:结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议 作者:Jelline
摘要:
本文简单介绍了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].
HTTP请求报文格式.rar
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议
- 【网络】结合Wireshark捕获分组深入理解TCP/IP协议栈 之 HTTP协议
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议
- 结合Wireshark捕获分组深入理解TCP/IP协议之IP协议
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 结合Wireshark深入理解TCP/IP协议
- 结合Wireshark捕获分组深入理解DNS协议
- 深入理解TCP/IP协议栈之TCP协议
- WireShark捕获报文理解TCP协议
- 理解TCP/IP协议栈之TCP协议
- TCP/IP协议之HTTP协议
- android adb常用指令
- C#——方法之输出参数
- 欢迎使用CSDN-markdown编辑器
- Block很简单,就像delegate的简化版
- Android6.0系统增加那些新特性
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议
- iOS开发------简单实现图片多选功能(AssetsLibrary.framework篇)
- 治疗咽炎最有效、最省钱、最方便的方法(我认为)
- C++笔记
- IOS小技巧-xcode代码块
- HNOI2002(Treap)
- 关于mobiscroll.js的文本框初始化问题
- osgEarth编译
- 提高win7单个程序的运行内存限制命令and JSON在线核对