HTTP的“对话”逻辑:请求与响应如何构建数据桥梁?
一、前言
作为现代互联网通信的基石,HTTP协议定义了客户端与服务器之间的“对话规则”。每一次网页加载、API调用或文件传输的背后,都离不开精心构造的HTTP请求与响应。请求中封装了用户的意图——从请求方法、资源路径到提交的数据;响应则承载着服务器的反馈——状态码揭示成败,头部传递元信息,正文返回结果。
理解两者的结构,不仅是后端开发、接口调试的必备技能,更是优化性能、排查问题的关键入口。本文将从报文格式、核心字段到实战案例,逐层拆解HTTP通信的底层逻辑,助你掌握网络交互的“第一性原理”。
二、HTTP 请求结构
HTTP 请求的完整结构
一个标准的 HTTP 请求由以下四部分组成:
[请求行]
[请求头]
[空行]
[请求体](可选)
1. 请求行(Request Line)
作用:请求行是 HTTP 请求的起始部分,它决定了客户端向服务器请求的类型以及请求的目标资源。通过请求方法、请求 URI 和 HTTP 版本这三个关键元素,请求行明确了客户端的意图和目标,使得服务器能够正确地理解和处理请求。
格式:<Method> <Request-URI> <HTTP-Version>
组成部分:
-
HTTP 方法(Method)
-
定义客户端对资源的操作类型。
-
常见方法:
- GET:获取资源(无请求体)。
- POST:提交数据(如表单)。
- PUT:更新整个资源。
- DELETE:删除资源。
- HEAD:获取响应头(无响应体)。
- PATCH:部分更新资源。
- OPTIONS:查询服务器支持的HTTP方法。
-
-
请求目标(Request-URI)
-
标识资源的位置,可以是绝对路径或完整URL。
-
示例:
/index.html
(相对路径)。http://example.com/api/data
(绝对路径,常见于代理请求)。
-
-
HTTP 版本
- 指定协议版本,如
HTTP/1.1
或HTTP/2
。 - 影响连接管理、性能优化等特性。
- 指定协议版本,如
示例:
GET /api/data?id=123 HTTP/1.1
2. 请求头(Request Headers)
作用:传递客户端信息、请求条件和控制指令。
格式:Header-Name: Header-Value
常见请求头字段:
字段名 | 作用 |
---|---|
Host | 目标服务器域名(HTTP/1.1 强制要求,用于虚拟主机)。 |
User-Agent | 客户端标识(如浏览器类型、操作系统)。 |
Accept | 声明客户端可接受的响应数据类型(如 text/html , application/json )。 |
Content-Type | 请求体的数据类型(如 application/json 、multipart/form-data )。 |
Content-Length | 请求体的字节长度(POST/PUT 必需)。 |
Authorization | 身份凭证(如 Bearer <token> )。 |
Cookie | 客户端存储的会话信息。 |
Cache-Control | 控制缓存行为(如 no-cache )。 |
Accept-Encoding | 支持的压缩算法(如 gzip , br )。 |
Content-Type字段
HTTP 请求头中的 Content-Type
字段用于指定请求体的媒体类型(MIME类型) ,帮助服务器正确解析客户端发送的数据格式。它是处理非 GET 请求(如 POST、PUT、PATCH 等)时的关键字段,尤其在 RESTful API 交互中至关重要。
主要作用
- 数据格式标识:明确告知服务器请求体的数据组织形式(如 JSON、表单、二进制等)。
- 解析依据:服务器根据
Content-Type
选择对应的解析方式(如 JSON 解析器、表单解码器等)。 - 兼容性保障:避免因数据格式不明确导致的解析错误或安全漏洞。
常见类型及用途
以下是几种典型的 Content-Type
值及其适用场景:
类型 | 格式说明 | 使用场景 |
---|---|---|
application/x-www-form-urlencoded | 键值对 URL 编码(如 name=John&age=30 ,空格转为 %20 ) | HTML 表单默认提交方式(非文件上传) |
multipart/form-data | 多部分数据,用 boundary 分隔,支持二进制文件 | 表单含文件上传时使用(需设置 <form enctype="multipart/form-data"> ) |
application/json | 请求体为 JSON 字符串(如 {"name": "John", "age": 30} ) | REST API 交互,前后端 JSON 数据传输 |
text/plain | 纯文本数据 | 简单文本传输(较少使用) |
application/xml | XML 格式数据 | 旧系统或特定协议要求的 XML 交互 |
application/octet-stream | 任意二进制数据流 | 文件下载或上传未知类型的二进制文件 |
示例代码
-
表单提交(URL 编码) :
POST /submit-form HTTP/1.1 Content-Type: application/x-www-form-urlencodedname=John%20Doe&age=30
-
文件上传(multipart) :
POST /upload HTTP/1.1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxk----WebKitFormBoundary7MA4YWxk Content-Disposition: form-data; name="file"; filename="example.jpg" Content-Type: image/jpeg(二进制文件数据) ----WebKitFormBoundary7MA4YWxk--
-
发送 JSON 数据:
POST /api/users HTTP/1.1 Content-Type: application/json{"name": "John", "age": 30}
注意事项
- 必选性:当请求有 Body 时(如 POST/PUT),必须设置
Content-Type
,否则服务器可能无法解析。 - 编码参数:可附加
charset
指定字符集(如Content-Type: text/html; charset=utf-8
)。 - 错误处理:类型不匹配可能导致
415 Unsupported Media Type
错误。 - 工具自动处理:Axios/Fetch 等库会根据数据自动设置类型(如 JSON 数据自动设为
application/json
),但需注意覆盖或手动设置。
常见问题
- Q: 上传文件时为何必须用
multipart/form-data
?
A: URL 编码无法处理二进制数据分块,multipart
通过boundary
分隔多字段/文件。 - Q: 忘记设置
Content-Type
会怎样?
A: 服务器可能按默认方式(如text/plain
)解析,导致数据无法正确读取。 - Q: 如何调试
Content-Type
问题?
A: 使用开发者工具(如 Chrome DevTools)检查请求头,确保与实际发送的数据格式一致。
正确设置 Content-Type
是 HTTP 通信的关键步骤,确保数据在客户端和服务器间高效、准确地传输。
示例:
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
3. 空行(Empty Line)
-
作用:分隔请求头和请求体。
-
格式:一个空行(
\r\n
)。 -
示例:
[请求头结束] [空行] [请求体开始]
4. 请求体(Request Body)
作用:携带客户端提交的数据(如表单、文件上传)。
适用方法:POST、PUT、PATCH 等。
常见数据格式:
格式 | Content-Type 值 | 示例 |
---|---|---|
表单数据 | application/x-www-form-urlencoded | username=admin&password=123456 |
JSON | application/json | {"name": "Alice", "age": 30} |
文件上传(多部分表单) | multipart/form-data | 分块传输,每部分包含文件内容和元数据。 |
纯文本 | text/plain | Hello, World! |
示例(JSON 格式) :
POST /login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
Content-Type: application/json{"username": "john_doe","password": "securepassword"
}
5. 完整示例
GET 请求:
GET /search?q=http+protocol HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
POST 请求(表单提交) :
POST /login HTTP/1.1
Host: api.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 29username=admin&password=123456
6. 总结
HTTP 请求的结构设计遵循简洁性与扩展性原则:
- 请求行明确操作目标和协议版本。
- 请求头传递元数据和控制指令。
- 请求体灵活支持多种数据格式。
理解其组成及规范,是调试接口、优化性能及保障安全性的基础。
关键注意事项
-
方法幂等性:
- GET、HEAD、PUT、DELETE 是幂等的(多次执行结果相同)。
- POST、PATCH 非幂等(可能产生副作用)。
-
安全性:
- GET、HEAD、OPTIONS 是安全的(不修改资源)。
- POST、PUT、DELETE 可能修改资源状态。
-
URI 长度限制:
- GET 请求参数通过 URL 传递,长度受浏览器限制(约 2048 字符)。
- 长数据应使用 POST 通过请求体传输。
-
协议版本差异:
- HTTP/1.1 要求
Host
头部,支持持久连接。 - HTTP/2 使用二进制分帧,隐藏了报文文本结构,但逻辑层保持一致。
- HTTP/1.1 要求
三、HTTP 响应结构
HTTP 响应是由服务器返回给客户端的结构化信息,它包含了客户端请求的结果以及相关的元数据。HTTP 响应结构主要由三部分组成:状态行、响应头和响应体。
HTTP 响应也由三部分组成:响应行、响应头部和响应体。
1. 响应行(Response Line)
响应行是 HTTP 响应的第一行,它包含了三个关键信息:HTTP 版本、状态码和状态消息。
-
HTTP 版本 :指明服务器使用的 HTTP 协议版本,例如
HTTP/1.1
或HTTP/2
。这有助于客户端了解服务器遵循的协议规范,从而正确解析响应内容。 -
状态码 :是一个三位数字代码,用于表示服务器对请求的处理结果。状态码是 HTTP 响应的核心部分之一,它提供了关于请求成功或失败的明确信息。常见的状态码包括:
- 200 OK :表示请求成功,服务器已正常处理请求并返回了相应的资源。
- 404 Not Found :表示请求的资源在服务器上不存在,无法找到。
- 500 Internal Server Error :表示服务器内部发生错误,无法完成请求。
- 302 Found :表示请求的资源被临时移动到另一个 URL,客户端需要进行重定向。
- 403 Forbidden :表示服务器拒绝了客户端的请求,通常是因为权限不足或服务器配置问题。
-
状态消息 :是对状态码的简要描述,通常是一个短语或句子,用于向人类用户提供更直观的反馈。例如,
OK
、Not Found
、Internal Server Error
等。状态消息通常与状态码一起使用,以提供更清晰的响应信息。
响应行示例:
HTTP/1.1 200 OK
表示HTTP版本是1.1
,状态码是200
,状态描述为OK
,即请求成功。
2. 响应头部(Response Headers)
响应头是 HTTP 响应中的重要部分,它包含了关于响应的详细信息,这些信息可以帮助客户端更好地理解和处理响应内容。响应头由一系列的键值对组成,每个键值对都以冒号分隔,例如 Key: Value
。以下是常见的响应头及其作用:
- Content-Type :指定响应体的媒体类型(MIME 类型),例如
text/html
、application/json
、image/jpeg
等。这告诉客户端如何解析和显示响应体中的数据。 - Content-Length :表示响应体的长度(以字节为单位)。客户端可以使用这个信息来确定响应体是否完整,或者在下载文件时显示进度条。
- Server :包含服务器软件的名称和版本信息,例如
Apache/2.4.58 (Win64) OpenSSL/3.2.0 PHP/8.3.4
。这可以帮助客户端了解服务器的运行环境,或者用于调试和分析。 - Set-Cookie :用于设置客户端的 Cookie。服务器可以通过这个响应头向客户端发送新的 Cookie,或者更新已有的 Cookie。Cookie 通常用于会话管理、用户认证等。
- Cache-Control :控制响应的缓存行为,例如
max-age=3600
表示响应可以在客户端缓存 3600 秒。这有助于提高性能,减少服务器的负载。 - Expires :指定响应的过期时间,例如
Thu, 15 Oct 2024 12:00:00 GMT
。客户端可以使用这个信息来判断响应是否过期,是否需要重新请求。 - Last-Modified :表示资源的最后修改时间,例如
Wed, 09 Oct 2024 10:00:00 GMT
。客户端可以使用这个信息来进行缓存验证,或者判断资源是否发生了变化。 - ETag :提供资源的实体标签,例如
"1234567890abcdef"
。ETag 是一种用于缓存验证的机制,客户端可以在请求头中发送If-None-Match
字段,服务器可以根据 ETag 判断资源是否发生了变化。
响应头部示例:
Content-Type: text/html; charset=UTF-8
Content-Length: 138
Date: Mon, 12 Feb 2025 14:30:00 GMT
Server: Apache/2.4.41 (Unix)
3. 响应体(Response Body)
响应体是 HTTP 响应的主体部分,它包含了服务器返回给客户端的实际数据。响应体的内容和格式取决于响应的类型和目的,例如:
- HTML 页面 :如果客户端请求的是一个网页,响应体通常是一个 HTML 文档,包含了网页的结构、内容和样式信息。客户端(通常是浏览器)会解析和渲染这个 HTML 文档,将其显示为用户可见的网页。
- JSON 数据 :如果客户端请求的是一个 API 接口,响应体通常是一个 JSON 格式的数据,包含了服务器返回的结果信息。客户端可以使用 JavaScript 或其他编程语言解析和处理这个 JSON 数据,从而实现动态的功能和交互。
- 图像、音频、视频等多媒体数据 :如果客户端请求的是一个多媒体资源,响应体通常是相应的二进制数据。客户端会根据响应头中的
Content-Type
字段来识别数据的类型,并使用相应的软件或插件进行播放或显示。 - 文本文件、PDF 文件等其他类型的数据 :如果客户端请求的是其他类型的文件,响应体通常是文件的内容。客户端可以根据响应头中的
Content-Type
字段和Content-Disposition
字段来判断如何处理这些文件,例如直接显示、下载保存等。
例如,当请求一个 HTML 页面时,响应体可能是:
<html><head><title>Example</title></head><body><h1>Welcome to the example page!</h1></body>
</html>
4. 完整示例
示例1
以下是一个 HTTP 响应的示例:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Server: Apache/2.4.58 (Win64) OpenSSL/3.2.0 PHP/8.3.4
Set-Cookie: session_id=1234567890; Path=/
Cache-Control: max-age=3600<!DOCTYPE html>
<html>
<head><title>Example Page</title>
</head>
<body><h1>Welcome to the Example Page</h1><p>This is an example of an HTML page returned in the response body.</p>
</body>
</html>
在这个示例中:
- 状态行 :
HTTP/1.1 200 OK
表示服务器使用的是 HTTP/1.1 协议,请求成功,状态码为 200,状态消息为 OK。 - 响应头 :包含了多个响应头字段,例如
Content-Type
指定了响应体的类型为text/html
,Content-Length
指定了响应体的长度为 1234 字节,Server
指定了服务器的软件信息,Set-Cookie
设置了一个新的 Cookie,Cache-Control
指定了缓存时间为 3600 秒。 - 响应体 :是一个 HTML 页面,包含了网页的结构和内容。客户端(通常是浏览器)会解析和渲染这个 HTML 页面,将其显示为用户可见的网页。
综上所述,HTTP 响应结构由状态行、响应头和响应体三部分组成,它们共同提供了服务器对客户端请求的完整响应信息。理解 HTTP 响应结构对于开发和调试 Web 应用程序至关重要,它可以帮助我们更好地理解服务器的行为和客户端的处理过程。
京东
如下为京东商品的一个接口,请求,响应结构示例:
四、总结
HTTP 请求结构
- 请求行:包含请求方法、目标资源和协议版本。
- 请求头部:包含客户端信息、请求元数据等。
- 请求体:在某些方法(如 POST、PUT)中,包含发送给服务器的数据。
HTTP 响应结构
- 响应行:包含协议版本、状态码和状态描述。
- 响应头部:包含响应元数据,如内容类型、长度、服务器信息等。
- 响应体:包含实际的返回数据,如网页内容、JSON 数据、文件等。
这种请求与响应结构使得客户端和服务器之间能够有效地交换信息,支持 Web 应用程序的构建。
HTTP请求与响应构成Web通信的核心框架。请求明确操作目标,响应传递结果与状态。深入理解其结构——从方法、URI到状态码、头部字段——是优化交互效率、精准调试的基石。掌握HTTP的请求和响应结构,不仅对Web开发者至关重要,也有助于优化网络性能和排查常见的通信问题。
相关文章:

HTTP的“对话”逻辑:请求与响应如何构建数据桥梁?
一、前言 作为现代互联网通信的基石,HTTP协议定义了客户端与服务器之间的“对话规则”。每一次网页加载、API调用或文件传输的背后,都离不开精心构造的HTTP请求与响应。请求中封装了用户的意图——从请求方法、资源路径到提交的数据;响应则承…...
【深度学习】预训练和微调概述
预训练和微调概述 1. 预训练和微调的介绍1.1 预训练(Pretraining)1.2 微调(Fine-Tuning) 2. 预训练和微调的区别 预训练和微调是现代深度学习模型训练中的两个关键步骤,它们通常是一个 预训练-微调 (Pretrain-Finetune…...

自动化测试框架搭建-单次接口执行-三部曲
目的 判断接口返回值和提前设置的预期是否一致,从而判断本次测试是否通过 代码步骤设计 第一步:前端调用后端已经写好的POST接口,并传递参数 第二步:后端接收到参数,组装并请求指定接口,保存返回 第三…...
【阮一峰】2.数组
数组 简介 所有成员的类型必须相同,但是成员数量是不确定的。 由于成员数量可以动态变化,所以 TypeScript 不会对数组边界进行检查,越界访问数组并不会报错。 第一种写法: let arr: (number | string)[];第二种写法ÿ…...

DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入)
前言 在当今数字化时代,AI编程助手已成为提升开发效率的利器。DeepSeek作为一款强大的AI模型,凭借其出色的性能和开源免费的优势,成为许多开发者的首选。今天,就让我们一起探索如何将DeepSeek接入PyCharm,实现高效、智…...

【Java Card】Applet 使用Shareable进行数据分享以及部分问题处理
文章目录 前言一、定义接口二、server端实现三、client端实现四、遇到的问题 前言 在进行开发时,可能会将业务放到不同的applet中,这时常常会需要进行数据的分享。 比如在一个applet中存储了密钥,而在另一个业务applet中需要进行签名时&…...
国产FPGA开发板选择
FPGA开发板是学习和开发FPGA的重要工具,选择合适的开发板对学习效果和开发效率至关重要。随着国产FPGA的发展,淘宝上的许多FPGA开发板店铺也开始进行国产FPGA的设计和销售,本文将对国产FPGA和相关店铺做个简单梳理,帮助有需要使用…...
com.typesafe.config
com.typesafe.config 是 Typesafe Config 库的核心包,主要用于 统一、灵活地管理应用程序配置,支持从多种格式(如 HOCON、JSON、Java Properties)加载配置,并提供类型安全的访问接口。以下是其核心功能的详细解析&…...
Ubuntu学习备忘
1. 打开Terminal快捷键 ctrl alt t 2.Ubuntu22.04的root没有默认初始密码, 为root设置密码,下面链接的step1, How to allow GUI root login on Ubuntu 22.04 Jammy Jellyfish Linux - LinuxConfig...

【C++】— 掌握STL vector 类:“Vector简介:动态数组的高效应用”
文章目录 1.vector的介绍和使用1.1vector的介绍1.2 vector的特点1.3vector的使用1.3.1vector的定义1.3.2vector iterator的使用1.3.3vector 的空间增长问题1.3.4 vector 的增删查改1.3.5vector 迭代器失效问题 1.vector的介绍和使用 1.1vector的介绍 vector是一个顺序容器&am…...
Docker__持续更新......
Docker 1. 基本知识1.1 为什么有Docker?1.2 Docker架构与容器化 画图解释 画图解释2. 项目实战 1. 基本知识 1.1 为什么有Docker? 用一行命令跨平台安装项目,在不同平台上运行项目。把项目打包分享运行应用。 1.2 Docker架构与容器化 准备机器,在机…...

【R语言】主成分分析与因子分析
一、主成分分析 主成分分析(Principal Component Analysis, PCA)是一种常用的无监督数据降维技术,广泛应用于统计学、数据科学和机器学习等领域。它通过正交化线性变换将(高维)原始数据投影到一个新的坐标系ÿ…...

ROS-相机话题-获取图像-颜色目标识别与定位-目标跟随-人脸检测
文章目录 相机话题获取图像颜色目标识别与定位目标跟随人脸检测 相机话题 启动仿真 roslaunch wpr_simulation wpb_stage_robocup.launch rostopic hz /kinect2/qhd/image_color_rect/camera/image_raw:原始的、未经处理的图像数据。 /camera/image_rectÿ…...

STM32 如何使用DMA和获取ADC
目录 背景 摇杆的原理 程序 端口配置 ADC 配置 DMA配置 背景 DMA是一种计算机技术,允许某些硬件子系统直接访问系统内存,而不需要中央处理器(CPU)的介入,从而减轻CPU的负担。我们可以通过DMA来从外设…...
【JAVA实战】JAVA实现Excel模板下载并填充模板下拉选项数据
背景 有这样一个场景:前端下载Excel模板,进行数据导入,这个下载模板过程需要经过后端接口去数据库查询数据进行某些列的下拉数据填充,下拉填充的数据过程中会出现错误String literals in formulas can’t be bigger than 255 cha…...
java面试笔记(一)
1. 一万个string类型的数据,设计一个算法如何按照String长度来排序 以使用 Arrays.sort() 方法,并结合一个自定义的比较器。以下是实现的示例代码: public class StringLengthSort {public static void main(String[] args) {// 定义一万个字符串的示例…...

【C++】36.C++IO流
文章目录 1. C语言的输入与输出2. 流是什么3. CIO流3.1 C标准IO流3.2 C文件IO流 4. stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。pri…...
Qt5开发入门指南:从零开始掌握跨平台开发
目录 Qt框架概述 开发环境搭建 基础语法与核心机制 第一个Qt窗口程序 常见问题解答 一、Qt框架概述 1.1 什么是Qt? Qt是一个1995年由挪威Trolltech公司开发的跨平台C图形用户界面应用程序框架。最新Qt5版本主要包含: GUI模块:支持Wind…...

Rook-ceph(1.92最新版)
安装前准备 #确认安装lvm2 yum install lvm2 -y #启用rbd模块 modprobe rbd cat > /etc/rc.sysinit << EOF #!/bin/bash for file in /etc/sysconfig/modules/*.modules do[ -x \$file ] && \$file done EOF cat > /etc/sysconfig/modules/rbd.modules &l…...
深度学习在蛋白质-蛋白质相互作用(PPI)领域的研究进展(2022-2025)
一、蛋白质-蛋白质相互作用(PPI)的定义与生物学意义 蛋白质-蛋白质相互作用(Protein-Protein Interaction, PPI)是指两个或多个蛋白质通过物理结合形成复合物,进而调控细胞信号传导、代谢、免疫应答等生命活动的过程。PPI是生物体内复杂功能网络的核心,例如酶与底物的结…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...