Wireshark实验——HTTP

基本 HTTP GET/response 交互

实验步骤

我们开始探索 HTTP,方法是下载一个非常简单的 HTML 文件 非常短,并且不包含嵌入的对象。执行以下操作:

  1. 启动您的浏览器。
  2. 启动Wireshark数据包嗅探器,如Wireshark实验-入门所述(还没开始数据包捕获)。在display-filter-specification窗口中输入“http”(只是字母,不含引号标记),这样就在稍后的分组列表窗口中只捕获HTTP消息。(我们只对HTTP协议感兴趣,不想看到其他所有的混乱的数据包)。
  3. 稍等一会儿(我们将会明白为什么不久),然后开始Wireshark数据包捕获。


4. 在浏览器中输入以下内容 http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file1.html 您的浏览器应显示非常简单的单行HTML文件。
5. 停止Wireshark数据包捕获。


在分组列表窗口中显示了两个被捕获的 HTTP 消息:GET 消息(从您的浏览器发送到 gaia.cs.umass.edu 的 web 服务器)和从服务器到浏览器的响应消息。分组内容窗口显示所选消息的详细信息(在这种情况下为 HTTP OK 消息)。回想一下,因为 HTTP 消息被装载在 TCP 报文段内,该报文段是在 IP 分组封装吗,进而在以太网帧,和帧中封装,所以界面中显示了帧,以太网,IP,TCP 分组信息以及 HTTP 报文信息。我们想最小化非 HTTP 数据的显示,所以确保帧,以太网,IP 和 TCP 行的信息被隐藏。

问题回答

通过查看HTTP GET和响应消息中的信息,回答以下问题。 在回答以下问题时,您应该指出您在消息中的哪个具体位置找到了回答以下问题的信息。 当您上交作业时,请注明输出,显示您在哪些地方表示了您的答案。

  1. 您的浏览器是否运行 HTTP 版本 1.0 或 1.1?服务器运行什么版本的 HTTP?

服务器:

浏览器(要提交 GET 请求):

由此可见,浏览器和主机都是使用了 HTTP 1.1 版本。
2. 您的浏览器会从接服务器接受哪种语言(如果有的话)?


经查阅资料,接收的语言为简体中文。

  1. 您的计算机的 IP 地址是什么? gaia.cs.umass.edu 服务器地址呢?


我的计算机:192.168.67.249
服务器:128.119.245.12
4. 服务器返回到浏览器的状态代码是什么?


一开始没注意,返回了 304,说明之前的缓存还能用,看来是因为我刷新了页面的原因。重新抓包返回 200 OK 表示请求成功,信息在返回的报文里。

  1. 服务器上HTML文件的最近一次修改是什么时候?


最后一次修改是 2020 年 4 月 21 日,星期二,5 时 59 分 02秒。
6. 服务器返回多少字节的内容到您的浏览器?


返回了 128 bytes 字节。
7. 通过检查数据包内容窗口中的原始数据,你是否看到有协议头在数据包列表窗口中未显示? 如果是,请举一个例子。



经查证资料,“favicon.ico” 这玩意是个图标,是收藏夹图标和浏览器标签。浏览器可能会自动请求网站根目录的这个图标,若目标网站没有这个图标就会返回 404。这个信息是个干扰,可以直接忽略掉。

HTTP 条件 Get/response 交互

实验步骤

大多数Web浏览器使用对象缓存,从而在检索 HTTP 对象时执行条件 GET。执行以下步骤之前,请确保浏览器的缓存为空,现在按下列步骤操作:

  1. 启动您的浏览器,并确保您的浏览器的缓存被清除,如上所述。
  2. 启动Wireshark数据包嗅探器。


3. 在浏览器中输入以下 URL http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html 您的浏览器应显示一个非常简单的五行HTML文件。


4. 再次快速地将相同的URL输入到浏览器中(或者只需在浏览器中点击刷新按钮)。
5. 停止Wireshark数据包捕获,并在 display-filter-specification 窗口中输入 “http” ,以便只捕获 HTTP 消息,并在数据包列表窗口中显示。


我抓的包有一些其他干扰,直接忽略。

问题回答

  1. 检查第一个从您浏览器到服务器的 HTTP GET 请求的内容。您在 HTTP GET 中看到了 “IF-MODIFIED-SINCE” 行吗?

翻翻翻,并没有发现。
2. 检查服务器响应的内容。服务器是否显式返回文件的内容? 你是怎么知道的?


有,返回了一段 HTML 标记码,包括了网页的文本。
3. 现在,检查第二个 HTTP GET 请求的内容。您在 HTTP GET 中看到了 “IF-MODIFIED-SINCE:” 行吗?如果是,“IF-MODIFIED-SINCE:” 头后面包含哪些信息?


看到了,包含的是一段时间信息,这个时间与网页最后一次修改时间一致。

查证了资料,知道了这个标签的含义。

If-Modified-Since是标准的HTTP请求头标签,在发送HTTP请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较。
如果时间一致,那么返回HTTP状态码304(不返回文件内容),客户端接到之后,就直接把本地缓存文件显示到浏览器中。
如果时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。

  1. 针对第二个 HTTP GET,从服务器响应的 HTTP 状态码和短语是什么?服务器是否明确地返回文件的内容?请解释。


这不就是我刚才遇到的问题吗?附上资料:

如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是:服务端已经执行了GET,但文件未变化。

也就是说,当前这个页面的缓存还保存着,并且服务器没有修改,因此这个缓存还能拿来用,就不需要服务器再发一遍了。

检索长文件

实验步骤

在我们到目前为止的例子中,检索的文档是简短的 HTML 文件。 接下来我们来看看当我们下载一个长的 HTML 文件时会发生什么。按以下步骤操作:

  1. 启动您的浏览器,并确保您的浏览器缓存被清除,如上所述。
  2. 启动Wireshark数据包嗅探器


3. 在您的浏览器中输入以下URL http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file3.html 您的浏览器应显示相当冗长的一个文件。


4. 停止Wireshark数据包捕获,并在display-filter-specification窗口中输入“http”,以便只显示捕获的HTTP消息。


在分组列表窗口中,您应该看到您的 HTTP GET 消息,然后是对您的 HTTP GET 请求的多个分组的 TCP 响应。这个多分组响应值得进行一点解释。HTTP响应消息由状态行组成,后跟标题行,后跟一个空行,后跟实体主体。在我们的 HTTP GET 这种情况下,响应中的实体主体是整个请求的 HTML 文件。在我们的例子中,HTML 文件相当长,4500 字节太大,一个 TCP 数据包不能容纳。因此,单个 HTTP 响应消息由 TCP 分成几个部分,每个部分包含在单独的 TCP 报文段中。

问题回答

  1. 您的浏览器发送多少 HTTP GET 请求消息?哪个数据包包含了文件的消息?


发送了一个请求信息。

这个包包含了文件的消息。
2. 哪个数据包包含响应HTTP GET请求的状态码和短语?


3. 响应中的状态码和短语是什么?

200 OK,表示请求成功,信息在返回的报文里。
4. 需要多少包含数据的 TCP 段来执行单个 HTTP 响应和文本?

目测需要 5 个包含数据的 TCP 段。

具有嵌入对象的 HTML 文档

现在我们已经看到Wireshark如何显示捕获的大型HTML文件的数据包流量,我们可以看看当浏览器使用嵌入的对象下载文件时,会发生什么。

实验步骤

  1. 启动您的浏览器。
  2. 启动Wireshark数据包嗅探器。


3. 在浏览器中输入以下 URL http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file4.html 您的浏览器应显示包含两个图像的短 HTML 文件。这两个图像在基本 HTML 文件中被引用。也就是说,图像本身不包含在 HTML 文件中;相反,图像的URL包含在已下载的HTML文件中。您的浏览器将不得不从指定的网站中检索这些图标。


停止 Wireshark 数据包捕获,并在 display-filter-specification 窗口中输入 “http”,以便只显示捕获的 HTTP 消息。

问题回答

  1. 您的浏览器发送了几个 HTTP GET 请求消息? 这些 GET 请求发送到哪个IP地址?




发送了 3 个 HTTP GET 请求消息,这些 GET 请求发送到 128.119.245.12。
2. 浏览器从两个网站串行还是并行下载了两张图片?请说明。


应该是串行下载,因为根据抓到的包,在第一张图片被下载完毕之后再开始下载第二张。不过这不符合我的认知,因为并行下载才是高效的方式,所以怀疑有干扰。

从排除干扰的包来看,应该是并行下载。

HTTP 认证

实验步骤

最后,我们尝试访问受密码保护的网站,并检查网站的 HTTP 消息交换的序列。URL http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wireshark-file5.html 是受密码保护的。执行以下操作:

  1. 请确保浏览器的缓存被清除,如上所述,然后关闭你的浏览器,再然后启动浏览器
  2. 启动Wireshark数据包嗅探器。


3. 在浏览器中输入以下 URL http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wiresharkfile5.html 在弹出框中键入所请求的用户名和密码。
4. 停止 Wireshark 数据包捕获,并在 display-filter-specification 窗口中输入 “http”,以便只显示捕获的 HTTP 消息。

由于我只能抓到 404,所以我就使用现成的包来看。

问题回答

  1. 对于您的浏览器的初始HTTP GET消息,服务器响应(状态码和短语)是什么响应?

401 Authorization Required,该状态码表示用户没有访问权限,需要进行身份认证。
2. 当您的浏览器第二次发送HTTP GET消息时,HTTP GET消息中包含哪些新字段?



多了 Authorization 和 Credentials 字段,这两个字段应该是在向网页提交用户名和密码。

参考资料

《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社
favicon.ico请求处理
HTTP的请求头标签 If-Modified-Since
304状态码
401错误

猜你喜欢

转载自www.cnblogs.com/linfangnan/p/12749143.html
今日推荐