Appearance
Appearance
超文本传输协议是一种基于文本的请求-响应客户端-服务器协议。HTTP 客户端(例如 Mozilla 这样的 Web 浏览器)向 HTTP 服务器(例如 Apache HTTP server)发起 HTTP 请求,服务器随后会返回 HTTP 响应。HTTP 协议头是基于文本的,其中各个 header 以文本行形式写入。
HTTP/1.1 允许客户端-服务器连接进行流水线处理,即可以发送多个请求(通常在同一个数据包中),而无需等待服务器响应。唯一限制是服务器必须按照接收请求的相同顺序返回响应。这能提高效率,尤其是在重新验证时。
还有一种名为 HTTPS 的加密变体。这通常用于需要数据隐私的场景,例如使用网上银行时。HTTPS 协议实际上是在彼此之上运行的两个协议。第一个协议是 SSL、TLS 或 PCT 之类的安全协议。第二个协议运行在该安全协议之上,即 HTTP。以 https:// 开头的 URL 对最终用户来说实际上只是一种简写表示。Web 浏览器会读取 URI scheme(https://),向服务器启动安全协议,并在此安全连接建立后,通过该连接发出 HTTP 请求,请求中包含指定的 URI。
超文本传输协议(HTTP)最早在日内瓦(瑞士)的 CERN 启动,它与 HTML 表示语言一起,源于在计算机网络上以简单方式交换科学信息的需求。第一个公开的 HTTP 实现只允许纯文本信息,并且几乎立即成为 GOPHER 服务的替代品。最早的基于文本的浏览器之一是 LYNX,它至今仍然存在;一个图形化 HTTP 客户端很快出现,名为 NCSA Mosaic。Mosaic 在 1994 年是一款流行浏览器。不久之后,人们产生了对更丰富多媒体体验的需求,标记语言也开始支持越来越多的媒体类型。
对多种媒体类型的支持已经是 1996 年以 RFC1945 发布的非正式 HTTP/1.0 标准的一部分。随着使用 HTTP 的社区以惊人的速度增长,并且得益于社区积累并由专家处理的使用经验,人们开始需要对 HTTP 协议进行更正式的定义。因此 HTTP/1.1 被发布,最初是 1997 年 1 月发布的 RFC2068,很快又被 1999 年 6 月发布的 RFC2616 取代。
MIME_multipart:HTTP 使用 MIME_multipart 对其消息进行编码。
TCP:通常,HTTP 使用 TCP 作为其传输协议。HTTP 流量的知名 TCP 端口是 80。HTTP proxy 通常使用不同端口;典型值为 81、3128、8000 和 8080。不过,HTTP 也可以使用其他传输协议。
最终用户浏览器发出的请求
该用户想访问网站 "www.freebsd.org",因此他们在浏览器中输入 http://www.freebsd.org 并按下回车。经过通常的 DNS 解析以查找 www.freebsd.org 的 IP 地址后,会通过 TCP 向 Web 服务器发起连接(SYN;SYN,ACK;ACK)。浏览器/客户端接下来发送给 Web 服务器的内容是以下纯文本请求:
GET / HTTP/1.1Host: www.freebsd.orgUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7) Gecko/20050414 Firefox/1.0.3Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveIf-Modified-Since: Mon, 09 May 2005 21:01:30 GMTIf-None-Match: "26f731-8287-427fcfaa"当服务器收到带有回车 + 换行(\r\n)的空行时,它就知道浏览器/客户端已经完成了其流量发送。
来自服务器的响应
响应同样是纯文本:
HTTP/1.1 200 OKDate: Fri, 13 May 2005 05:51:12 GMTServer: Apache/1.3.x LaHonda (Unix)Last-Modified: Fri, 13 May 2005 05:25:02 GMTETag: "26f725-8286-42843a2e"Accept-Ranges: bytesContent-Length: 33414Keep-Alive: timeout=15, max=100Connection: Keep-AliveContent-Type: text/html浏览器/客户端现在知道接下来会收到 text/html,内容如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><!-- Rest of the HTML Page Here --></html>当浏览器/客户端收到带有回车 + 换行(\r\n)的空行时,它就知道服务器已经完成了其 html(或非 html 数据)的发送。
Wireshark 的 HTTP dissector 功能完整(XXX - 这真的正确吗?)。(XXX - 在这里添加一些关于 MIME body data encoding/enchunking 的文字)。此外,你可以使用 Wireshark 的菜单项 Statistics/HTTP 获取 HTTP 请求/响应的基本统计信息。
有一些 HTTP_Preferences。
SampleCaptures/http.cap 一个简单的 HTTP 请求和响应。
SampleCaptures/http_gzip.cap。一个简单的 HTTP 请求和一个单包 gzip Content-Encoded 响应。如果你在解压 Content-Encoded 数据包时遇到问题,可以尝试这个抓包,因为它可以在默认首选项下工作。
HTTP 显示过滤器字段的完整列表可以在显示过滤器参考中找到
只显示基于 http 的流量:
http只显示著名的 "404: page not found" 响应:
http.response.code == 404只显示通过 HTTP 接收的文件数据(响应的内容):
http.content_type抓包时不能直接过滤 HTTP 协议。不过,如果你知道所使用的 TCP 端口(见上文),可以按该端口过滤。
捕获默认端口(80)上的 HTTP 流量:
tcp port 80捕获默认 SSL 端口(443)上的 HTTP 流量:
tcp port 443RFC1945 超文本传输协议 -- HTTP/1.0
RFC2068 超文本传输协议 -- HTTP/1.1(已被 RFC2616 废止)
RFC2616 超文本传输协议 -- HTTP/1.1
W3C 上的 HTTP 规范和草案页面
RFC2660 安全超文本传输协议(S-HTTP)
Imported from https://wiki.wireshark.org/Hyper_Text_Transfer_Protocol on 2020-08-11 23:14:53 UTC