当前位置: 首页 > news >正文

【网络原理】HTTP协议(一)

目录

1. HTTP协议的概念

2. HTTP协议的工作流程

3. HTTP协议的报文格式

3.1 抓包工具

3.2 HTTP请求格式

 3.3 HTTP响应格式

4. URL(统一资源定位符)

4.1 URL的组成

4.2 URL encode 


1. HTTP协议的概念

HTTP(超文本传输协议)是互联网上应用最广泛的应用层协议,用于在客户端和服务器之间传输超文本及其他数据。


这里萌新就会有疑问,什么是超文本?

文本

主要的数据为字符串,可以在UTF-8、GBK等字符编码表中找到合法的字符表示。

超文本

超文本不仅包含字符串,还可以嵌入图片、链接、音频、视频等非文本数据。超文本的核心是超链接,允许用户通过点击链接跳转到其他文档或资源,典型代表是HTML。

富文本

富文本是一种可以包含多种格式(如字体、颜色、表格、图片等)的文本形式,常见的应用场景包括Word文档、电子邮件、网页编辑器等

2. HTTP协议的工作流程

HTTP协议是一种基于请求-响应模型的通信协议,最主要的应用场景—网站,最常见的就是浏览器和服务器之间的传输数据,客户端(pc端,移动端)和服务器之间的数据传输

 HTTP协议交互的过程,就是典型的一问一答型

  1. 建立连接:客户端通过TCP/IP与服务器建立连接。

  2. 发送请求:客户端发送HTTP请求报文。

  3. 处理请求:服务器解析请求并生成响应。

  4. 返回响应:服务器发送HTTP响应报文。

  5. 关闭连接:关闭连接


3. HTTP协议的报文格式

3.1 抓包工具

抓包工具:抓包工具本质上就是一个“代理程序”,能够获取网络上传输的数据并显示出来,可以给我们在日常开发的时,提供一些参考

这里我们使用的抓包工具是fiddle软件,这个软件功能很强大,最简单的应用就是抓包,还可以进行弱网测试之类操作,在日常工作中经常使用这个软件


比如我们打开百度搜索界面的时候,会在fiddle中会显示,抓到的数据包,你的电脑上任何一个程序,只要使用了HTTP/HTTPS协议,都会被fiddle捕获到,

我们可以观察到,打开一个网站,客户端和服务器之间的交互不止一条,而是很多次

比如说,第一次交互是为了拿到这个页面的HTML,第二次交互为了拿到CSS,JS等数据,执行js的时候有可能会出发很多的http请求,出发更多的交互,获取更多的数据

 右上角为请求明细,左下角为响应明细,一般会对返回的响应进行压缩(节省带宽),请求不会压缩,在传输数据的时候,压缩和解压缩都是需要消耗资源和时间的


3.2 HTTP请求格式

 HTTP请求包含4个部分

1. 请求行(Request Line)

格式:<方法> <请求URI> <HTTP协议版本>GET https://www.baidu.com/?tn=15007414_3_dg HTTP/1.1
  • 方法:指定操作类型(如GET、POST等)。

  • 请求URI:目标资源路径(可包含查询参数,如/path?key=value)。

  • 协议版本:常见的版本—HTTP/1.1

2. 请求头(Headers)

 键值对的格式

头部字段作用
Host服务器域名(必填,HTTP/1.1强制要求)
User-Agent客户端标识(如浏览器或curl)
Accept声明客户端可处理的响应类型(如text/htmlapplication/json
Content-Type请求体的数据类型(如application/jsonmultipart/form-data
Content-Length请求体的字节长度(POST/PUT时需要)
Authorization认证信息(如Bearer Token)
Cookie发送给服务器的Cookie数据

举例:

Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="9", "Not?A_Brand";v="8"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 SLBrowser/9.0.6.7021 SLBChan/10 SLBVPV/64-bit
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9

从第二行开始,一直到后面都是请求头,其中每一个键值对占一行,键和值之间使用空格分隔

3. 空行

请求头的下面会有一行空行,表示结束

4. 请求体(Body)

 http的载荷部分,有的请求中存在body,有的则不存在

 常见的格式:

  • application/x-www-form-urlencoded:表单数据

  • application/json:JSON格式

  • multipart/form-data:文件上传

举例:

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 28{"name":"John","age":25}

 3.3 HTTP响应格式

HTTP响应的基本格式,也是分为4个部分

1. 状态行(Status Line)

格式:<HTTP协议版本> <状态码> <状态描述>举例:HTTP/1.1 200 OK
  • 协议版本:如 HTTP/1.1 或 HTTP/2

  • 状态码:3位数字,表示请求结果(如 200 表示成功)。

  • 状态描述:状态码的文本说明(如 OKNot Found)。

2. 响应头(Headers)

同样是根据键值对返回信息

头部字段作用
Content-Type响应体的数据类型(如 text/htmlapplication/json
Content-Length响应体的字节长度(重要,尤其对二进制数据)
Server服务器软件信息(如 Apache/2.4
Date响应生成的时间(GMT格式)
Set-Cookie设置客户端的Cookie(用于会话管理)
Cache-Control控制缓存行为(如 no-cachemax-age=3600
Location重定向目标URL(状态码为3XX时使用)

3. 空行

请求头的下面会有一行空行,表示结束

4. 响应体(Body)

内容:服务器返回的实际数据(HTML、JSON、图片等)。

格式:由 Content-Type 决定,常见类型:

  • text/html:网页内容。

  • application/json:API响应数据。

  • image/png:二进制图片数据。


4. URL(统一资源定位符)

URL:互联网上用于标识和定位资源的一段字符串,主要的作用就是定位资源

4.1 URL的组成

  https://www.example.com:8080/path/to/resource?query=value#fragment\___/   \_____________/\___/\_______________/\_________/ \_______/|           |         |          |             |           |协议        主机名     端口       路径          查询参数     片段标识
  • 协议(Scheme):指定访问资源使用的协议
  • 主机名(Host):服务器的域名或IP地址
  • 端口号(Port):服务器监听的端口号,如果不写端口号,会有一个默认的端口号
  • 路径(Path):服务器上的资源路径
  • 查询参数(Query String):以 ? 开头,包含 key=value 对,多个参数用 & 连接。
  • 片段标识(Fragment):以 # 开头,用来标识当前页面的某个部分

通过IP地址知道服务器在哪,通过端口号知道程序是哪个,通过路径知道访问那个资源

查询参数,是客户端给服务器传递信息的重要途径,这里数据的组织方式是键值对

根据IP地址,端口号,路径,查询参数,就可以描述出一个网络资源的位置


4.2 URL encode 

 在URL中,有一些数据字符,被保留可以正常使用,有一些字符不能被正常表示,如中文,空格这类的数据,必须进行编码,否则服务器会解析错误,出现一定的bug

bug举例

原始字符串:
https://example.com/files/document#1.pdf

 比如这里#并不是表示片段表示的出现,而是路径中的参数,避免出现歧义,则需要编码

编码后:
https://example.com/files/document%231.pdf

将 #  -> %23  (避免被误认为片段标识符)

URL 编码规则

格式:% + 2位十六进制数(对应字符的 ASCII 或 Unicode 编码)。

字符编码后
空格%20
/%2F
?%3F
=%3D
&%26
#%23

 举例:

原始URL:
https://example.com/search?q=HTTP 协议&page=1编码后:
https://example.com/search?q=HTTP%20%E5%8D%8F%E8%AE%AE&page=1

在开发的时候,如果URL中的查询参数中出现中文和特殊字符,进行编码是非常有必要的

http://www.dtcms.com/a/311289.html

相关文章:

  • 【LeetCode 热题 100】(四)子串
  • leetcode热题——组合
  • 【10】VisionMaster入门到精通——脚本打印日志到本地(获取条码和二维码信息)
  • React ahooks——副作用类hooks之useThrottleEffect
  • 易华路副总经理兼交付管理中心部门经理于江平受邀PMO大会主持人
  • Cursor 与 VS Code 与 GitHub Copilot 的全面比较
  • 高性能MCP服务器架构设计:并发、缓存与监控
  • 【MySQL集群架构与实践5】使用Docker实现水平分片
  • 在医疗设备高精度需求下,猎板印制线路板的定制化服务与实践
  • 开源在线客服系统Chatwoot配置文件
  • 西门子 G120 变频器全解析:从认知到参数设置
  • 进阶向:自动化天气查询工具(API调用)
  • 江协科技STM32 13-1 PWR电源控制
  • 【DL学习笔记】DL入门指南
  • 攀爬识别场景误报率↓77%:陌讯动态特征融合算法实战解析
  • C++ 模板初阶
  • Oracle 11g RAC集群部署手册(二)
  • OAuth 2.0 详解:现代授权的核心协议
  • 《机器学习数学基础》补充资料:泰勒定理与余项
  • webpack面试题及详细答案80题(61-80)
  • linux-process-control
  • Linux自主实现shell
  • Maven - 并行安全无重复打包构建原理揭秘
  • 探索 Python 的 `lambda` 函数:简洁的利器与其限制
  • LangGraph认知篇-Command函数
  • 深度学习(鱼书)day09--与学习相关的技巧(前三节)
  • sqli-labs:Less-18关卡详细解析
  • 拉格朗日插值法
  • 防火墙配置实验2(DHCP,用户认证,安全策略)
  • 防火墙相关技术内容