HTTP Packets And Packet Analysis
主要内容
这次的内容主要是回顾与总计与总结关于HTTP报文相关知识,并对抓包方法与工具进行总结和介绍。
HTTP报文
- 基础知识回顾
分类与组成部分:请求报文与响应报文:报文均由起始行+首部+可选的实体的主体部分
由于首部字段居多,而且针对不同功能有不同用法,比如有些会针对缓存设计,有些针对代理设计等等。这些在后面具体部分还会在详细深入。这里只是简单提出。本部分会总计部分跟缓存相关的首部。这是我过去接触比较多的一些。
- 常见报文展示
使用wireshark工具,抓取常见HTTP请求回应包,可以对之前的总结有更直观的认识。
GET请求示例
POST请求示例
OK响应示例
报文流
图中标出了两个报文流,这也可以看出HTTP请求响应模式
- 关于GET和POST
Http协议定义了很多与服务器交互的方法,常用的有七个,最基本的有4个,分别是GET,POST,PUT,DELETE。 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。类似数据库的操作。 最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
GET和POST的基本区别:
GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
GET和POST取变量值的方法不同。
GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
- 缓存相关首部
Request相关
Cache-Control: max-age=0 | 以秒为单位 |
If-Modified-Since: Mon, 19 Nov 2012 08:38:01 GMT | 缓存文件的最后修改时间 |
If-None-Match: "0693f67a67cc1:0" | 缓存文件的Etag值 |
Cache-Control: no-cache | 不使用缓存 |
Pragma: no-cache | 不使用缓存 |
Response相关
Cache-Control: public | 响应被缓存,并且在多用户间共享 | |
Cache-Control: private | 响应只能作为私有缓存,不能在用户之间共享 | |
Cache-Control:no-cache | 提醒浏览器要从服务器提取文档进行验证 | |
Cache-Control:no-store | 绝对禁止缓存(用于机密,敏感文件) | |
Cache-Control: max-age=60 | 60秒之后缓存过期(相对时间) | |
Date: Mon, 19 Nov 2012 08:39:00 GMT | 当前response发送的时间 | |
Expires: Mon, 19 Nov 2012 08:40:01 GMT | 缓存过期的时间(绝对时间) | |
Last-Modified: Mon, 19 Nov 2012 08:38:01 GMT | 服务器端文件的最后修改时间 | |
ETag: "20b1add7ec1cd1:0" | 服务器端文件的Etag值 |
HTTP抓包
- 浏览器抓包
不同浏览器都有相应的抓包分析工具,可以对HTTP连接进行简单的查看。最经典最常用的有Firefox的Firebug,Chrome浏览器直接审查元素等方式。
Firebug 简介
Firebug集HTML查看和编辑、Javascript控制台、网络状况监视于一体,可以说是开发人员必备扩展之一。Firebug从各个不同的角度剖析 Web页面内部的细节层面,给Web开发者带来很大的便利。安装使用简单,直接在Firefox浏览器的加载项中安装使用即可。
Firebug 抓包
使用Firebug抓包,访问百度首页两次,比较访问其中时间数据,在看看具体请求响应报文。这些都是Firebug工具很容易实现的功能。
两次访问百度
第一次访问时间数据统计
第二次访问时间数据统计
访问百度请求响应数据包
- 其他工具抓包
工具类主要是wireshark和tcpdump。这是两个强大的工具。前面举例中已经使用了wireshark抓包。这里再介绍下如果需要抓HTTP包,主要是过滤规则的设置。对于HTTP包,wireshark常见的过滤规则有:
http 所有http包
http.connection 过滤出应用程序的http请求和返回
http.date 仅仅显示返回包
http.host 应用程序和设备消息查询的请求包
http.referer 应用程序的请求包
http.request 应用程序和设备的请求包
http.response 应用程序的返回包
http.server 同上(服务器返回的包)
下图是比较完整的HTTP过滤规则【因为一张图无法全部截下,遗漏最后几个,可以在wireshark中查出】:
分析HTTP报文相对来说,wireshark过滤规则比tcpdump更加灵活,能够针对具体的首部、类型、组成等来进行分析。至于tcpdump在后面关于分析连接中再详细介绍。
参考资料
blog comments powered by Disqus