【网络安全 | 网络协议应用层】结合Wireshark讲解HTTP协议

简介: 【网络安全 | 网络协议应用层】结合Wireshark讲解HTTP协议

前言

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。


HTTP协议在Wireshark数据包中是如何体现的?在此之前,先熟悉HTTP协议。

HTTP协议

在 HTTP 协议中,客户端发送请求包到服务器,服务器接收请求并返回响应包给客户端。流程如下:

1.客户端发起请求:

  • 客户端构建一个 HTTP 请求包,包括请求行、请求头和请求主体。
  • 请求行包含请求方法(GET、POST、PUT等)、请求的 URI(Uniform Resource Identifier)以及协议版本。
  • 请求头包含关于请求的附加信息,例如 Host、User-Agent、Content-Type 等。
  • 如果有请求主体,比如在 POST 请求中传递表单数据,它会被包含在请求主体中。

2.服务器接收请求:

  • 服务器接收到客户端发送的请求包。
  • 服务器解析请求行,确定请求的方法、URI 和协议版本。
  • 服务器解析请求头,获取关于请求的附加信息。

3.服务器处理请求:

  • 服务器根据请求的方法和 URI,执行相应的操作,例如获取资源、处理表单数据等。
  • 服务器生成响应内容,包括响应状态行、响应头和响应主体。

4.服务器发送响应:

  • 服务器构建一个 HTTP 响应包,包括响应状态行、响应头和响应主体。
  • 响应状态行包含响应的状态码(例如 200 表示成功,404 表示未找到等)和状态描述。
  • 响应头包含关于响应的附加信息,例如 Content-Type、Content-Length 等。
  • 响应主体包含实际的响应内容,例如 HTML 页面、JSON 数据等。

5.客户端接收响应:

  • 客户端接收到服务器发送的响应包。
  • 客户端解析响应状态行,获取响应的状态码和状态描述。
  • 客户端解析响应头,获取关于响应的附加信息。
  • 如果有响应主体,客户端会读取响应主体中的数据。

6.客户端处理响应:

  • 客户端根据响应的状态码和状态描述,决定如何处理响应结果。
  • 客户端可以解析响应主体中的数据,根据需要进行显示、处理或其他操作。

Wireshark抓包分析

访问百度,触发HTTP协议:

ping命令得到ip后,用ip.addr过滤数据包:

三次握手的流程本文不再赘述,在这篇文章有详析介绍:【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

重点观察中间红框内的三个包

第一个包的内容:

讲解:

请求包包括请求行(包含请求方法、请求URL、HTTP版本)、请求头(包含请求的客户端的信息)、请求体(POST等类型的请求含有请求体)。

第一个包为请求包,我们先看请求行:

  • REQUEST METHOD:HEAD 表示请求方法为head,用来获取报文首部;
  • REQUEST URI:/ 表示我们没有请求特定的url,默认为/;
  • REQUEST VERSION:HTTP/1.1 表示HTTP版本为1.1。

再看请求头:

请求头的存在形式是每个请求头占一行

  • Host:baidu.com\r\n 表示目标主机为baidu.com,并且以 \r\n 结尾以便与下一个请求头字段进行分隔。
  • User-Agent表示代理,即浏览器类型,由于我们使用的是curl命令,所以显示curl/8.4.0。
  • Accept:浏览器可接受的MIME类型,这里为*/*,表示可以接受任何类型的响应,包括文本、图像、音频、视频等。

由于我们没有进行POST等请求,因此没有请求体。

接着观察第三个包

第三个包为响应包

讲解:

状态行:包含响应版本和响应状态码、提示信息

响应头(以每个占一行的形式存在):包含响应的服务器的资源信息

我们先看状态行:

  • Response Version:响应版本,这里表示版本为HTTP/1.1。
  • Status Code:响应状态码,这里 200 表示请求成功。
  • Response Phrase:响应状态码的提示信息,OK表示成功响应。

再看响应头:

1.Date表示服务端(即baidu.com)发送响应报文的时间

2.Server表示服务器版本

3.Last-Modified表示请求的对象创建或者最后修改的时间

4.ETag表示对象的标志值,如果对象修改了,这个值也会改变。

5.Accept-Ranges表示支持的范围单位,图中表示该服务器支持按字节范围请求资源

6.Content-Length表示内容长度,图中表示内容长度为81。

7.Cache-Control缓存控制,它指定了资源在被缓存之后可以被重用的最长时间,以秒为单位。图中"max-age=86400" 表示资源可以在缓存中保留一天(24小时)。

8.Expires表示该资源的缓存有效期截止时间,这个时间前,可以直接访问缓存副本。

9.Connection:连接类型,Keep-Alive表示这是一个长链接,可以继续用这个连接通信。

10.Content-Type用于指示响应主体的媒体类型,图中 “text/html” 表示响应的主体是 HTML 格式的文本内容,这意味着客户端收到这个响应后会知道要以 HTML 的方式进行解析和显示。

请求及响应报文可以通过追踪HTTP流显示:

目录
相关文章
|
5月前
|
存储 网络协议 算法
从HPACK到多路复用,揭秘HTTP/2如何终结网络拥堵
HTTP/2通过HPACK压缩头部冗余信息,提升传输效率;并利用多路复用技术,在单个TCP连接上并行处理多个请求,避免队头阻塞,显著提升性能。同时支持服务器推送和流优先级设置,优化资源加载体验。
318 7
|
8月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
426 61
|
8月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
9月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
247 18
|
10月前
|
XML JSON 网络协议
利用HTTP POST协议实现简单的RPC协议:WireShark抓包分析
通过这种方式,我们可以使用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这不仅可以帮助我们理解RPC协议的工作原理,也可以帮助我们调试和优化我们的代码。
507 30
|
10月前
|
JSON 数据格式
利用HTTP POST协议实现简单的RPC协议,并使用WireShark进行抓包分析
通过这种方式,我们可以利用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这种方式简单易懂,实用性强,可以应用于各种网络编程场景。
400 16
|
10月前
|
网络安全
网络问题解析:如何解决CondaHTTPError HTTP 000 CONNECTION FAILED错误。
以上就是斯诺普为你准备的解决Conda出现HTTP连接错误的手术室。希望这辆小车可以顺利驶出棘手的泥潭,再次在自由的大路上疾驰。一切的尝试和努力,只为更好的探索与开发。
387 17
|
10月前
|
人工智能 Kubernetes 安全
网络安全公司前沿洞察:F5凭何成为网络安全领域的中流砥柱
网络安全公司前沿洞察:F5凭何成为网络安全领域的中流砥柱
345 4
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
ZooKeeper 保证了数据的强一致性,  zk集群中任意节点(一个zkServer)上的相同znode下的数据一定是相同的。
903 0
|
Web App开发 前端开发 测试技术
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
一、迁移步骤 1.首先安装最新版本gitlab(gitlab7.2安装) 2.停止旧版本gitlab服务 3.将旧的项目文件完整导入新的gitlab   bundle exec rake gitlab:import:r...
823 0

热门文章

最新文章