一. 实验说明。
在这个实验中,我们将探讨HTTP协议的几个方面:基本的GET/response交互、HTTP消息格式、检索大型HTML文件、检索带有嵌入对象的HTML文件、以及HTTP认证和安全性。
二. 基本HTTP获取/响应(GET/response)交互
我们通过下载一个非常简单的HTML文件来开始对HTTP的探索——一个非常短的、不包含嵌入对象的文件。
a. 启动网页浏览器。
b. 启动EnthalBox嗅探器,如介绍性实验室中所描述的(但尚未开始捕获数据包)。在“显示筛选器规范”窗口中输入“HTTP”(只是字母,而不是引号),以便只在分组列表窗口中显示捕获的HTTP消息。(我们只对HTTP协议感兴趣,不想看到捕获所有的混乱数据包)。
c. 等待一分钟多一点(我们马上就会明白),然后开始以太包捕获。
d. 向浏览器输入以下内容:
http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file1.html
浏览器应该显示非常简单的单行HTML文件。
e. 停止抓包
通过抓包结果可以看到,客户端向服务器请求一个简单的HTML文件,服务器将该文件返回给客户端。
问题:
1. 浏览器运行HTTP版本1还是1.1?服务器运行的是什么版本的HTTP?
浏览器运行的HTTP版本是1.1,服务器运行的HTTP版本也是1.1。
本地浏览器:
服务器:
2. 您的浏览器显示哪些语言(如果有的话)可以通过服务器接收?
我的本地浏览器显示简体中文(zh_CN)
3. 你的电脑的IP地址是什么?gaia.cs.umass.edu服务器呢?
本地电脑ip: 10.63.108.63
gaia.cs.umass.edu服务器ip:128.119.245.12
4. 从服务器返回到浏览器的状态代码是什么?
返回的状态代码是 200 ,表示成功处理请求。
5. 您在服务器上检索到的HTML文件是在什么时候修改的?
在服务器上检索到的HTML文件修改时间:2018.5.14 05:59:01
6. 有多少字节的内容被返回到浏览器?
有126字节的内容被返回到浏览器。
7. 除以上已回答过的字段外,头部还有哪些字段?在数据包内容窗口中检查原始数据,是否有未在数据包列表中显示的头部?
HTTP请求报文中还有Host字段、connection字段、Accept字段、User-agent字段、Accept-Encoding字段等。
HTTP响应报文中还有server字段、connection字段等。
三. HTTPGET/Response 有条件的相互作用。
步骤
①打开Wireshark,开始数据包捕获。
②在你的浏览器中输入如下的 URL 地址:http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html
浏览器将会显示一个很简单的 5 行的 HTML 文件;
③快速地在你的浏览器中再次输入相同的 URL(或者点一下刷新);
④停止Wireshark 数据包捕获,在在 Wireshark 主窗口顶部的 Filter 中输入“ http”,因此只有捕获的 HTTP 消息稍后将会显示在数据包列表窗口中。
得到如下数据报:
问题:
8. 从你的浏览器到服务器得到的请求中检查第一个 HTTP GET 的内容。在 HTTP GET中你有没有看到一行“ IF-MODIFIED-SINCE” ?为什么?
没有看到。因为这是浏览器第一次请求该页面。
9. 检查服务器回应内容,服务器明确地返回了文件的内容吗?你怎样断定?
返回了文件内容,因为返回状态码为200。并返回了html文件。
10. 现在从你的浏览器到服务器得到的请求中检查第二个 HTTP GET 的内容。在 HTTP GET 中你有没有看到一行“IF-MODIFIED-SINCE” ?如果有,在“ IF-MODIFIED-SINCE”头部有什么信息?
有这行字段。信息为上次请求该文件的时间。
11. 第二次 HTTP 返回的状态码是多少?从服务器返回的响应第二个 HTTP GET 的短语是什么?服务器明确地返回了文件的内容吗?为什么?
状态码是304,短语是Not Modified,并没有明确返回文件内容,因为该网页内容在上次访问之后未被修改过,且本地中有上次访问的缓存。
四. 得到较长的文档。
在我们的示例中,检索到的文档是简单而简短的HTML文件。接下来,看看下载一个长的HTML文件时会发生什么。做到以下几点:
①打开你的浏览器,确信你的浏览器缓存是空的,就如上面讨论的;
②打开Wireshark,开始数据包捕获;
③在你的浏览器中输入如下的 URL 地址:http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file3.html 你的浏览器将会显示相当长的美国权利法案;
④停止 Wireshark 数据包捕获,在 Filter 栏输入“ http”,因此只有捕获的 HTTP 消息稍后将会显示在数据包列表窗口中。
问题:
12. 你的浏览器发送了多少个HTTPGET请求消息?
发送了一个HTTPGET请求。
13. 传输这一个HTTP响应需要多少个TCP数据段?
传输这一个HTTP响应需要4个TCP数据段。
14. 响应HTTP GET请求的相关的状态码和短语是什么?
状态码200,短语OK。
15. 在TCP“Continuation”附加关联的传输数据中有没有HTTP状态码和短语?
有状态码和短语。
五. 带有内嵌对象的HTTP
现在,我们已经看到了Ethalar如何显示捕获的大HTML文件的分组流量,我们可以看看当浏览器下载带有嵌入对象的文件时会发生什么,即,包含其他服务器(在下面的示例中,图像文件)存储在另一个服务器上的文件。
步骤:
①打开浏览器,确定你的浏览器缓存是空的,就如上面讨论的;
②打开Wireshark Network Analyzer,开始数据包捕获;
③在你的浏览器中输入如下的 URL 地址: http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file4.html
④停止 Wireshark 数据包捕获,在 Filter 窗口中输入“ http”,因此只有捕获的 HTTP 消息稍后将会显示在数据包列表窗口中。
问题:
16. 浏览器一共发出了多少个HTTP GET请求?这些请求被发送到的目的地的IP地址是多少?
发送了四个HTTP GET请求,目的地址为:
128.119.245.12
128.119.245.12
128.119.240.90
128.119.240.90
17. 你的浏览器是否同时下载这两张图片(并发的从两个网站上下载图片)?你是如何判断的?
不是并发下载的,有先后顺序。
六. HTTP 认证
访问一个带有密码保护的网站。
步骤:
①确信你的浏览器缓存是空的,就如上面讨论的。关闭你的浏览器,然后再打开;
②打开Wireshark Network Analyzer,开始数据包捕获;
③在你的浏览器中输入如下的 URL 地址:http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wireshark-file5.html在出现的对话框中输入用户名和密码,用户名是“wireshark-students”,密码是“networks”;
④停止Wireshark 数据包捕获,在Filter窗口中输入“ http”,因此只有捕获的HTTP消息稍后将会显示在数据包列表窗口中。
问题:
18. 服务器对起初的HTTP GET消息的响应(状态码和短语)是什么?与前一部分实验相比,在这个响应消息中出现了什么新的字段?
状态码:401 短语:AuthorizationRequired
新字段:WWW-Authenticate
19. 当你的浏览器第二次发送HTTP GET消息时,有什么新的字段被包含在HTTP GET消息中?对应的服务器响应有没有新的字段出现?
GET消息中出现了新的Authorization字段。服务器响应出现了ETag字段。
20. 当你的浏览器第二次发送HTTP GET消息时,有什么新的字段被包含在HTTPGET消息中?当你输入正确的用户名和密码后,服务器给出的响应是什么?
HTTP request字段。
输入正确的用户名和密码后,服务器给出的响应(状态码200,短语OK):