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

WHAT - 不同 HTTP Methods 使用场景、使用方法和可能遇到的问题

目录

  • 前言
  • 基本介绍
  • 具体介绍
    • 前置知识:幂等和非幂等
      • 幂等操作
      • 非幂等操作
      • 幂等性和非幂等性的应用场景
      • 总结
    • 1. GET
    • 2. POST
    • 3. PUT
    • 4. PATCH
      • 1. 确保操作是幂等的
      • 2. 使用版本控制或条件更新
      • 3. 全量更新部分属性
      • 4. 使用特定操作指令
      • 5. 幂等标识符
      • 示例代码
      • 总结
    • 5. DELETE
    • 6. HEAD
    • 7. OPTIONS
    • 8. CONNECT
    • 9. TRACE
    • 总结

前言

HTTP Methods: Request methods define the type of action you are requesting to be performed.

  1. GET - Requests retrieve resource information
  2. POST - The server creates a new entry in a database
  3. PUT - Updates an existing resource
  4. PATCH - Very similar to PUT but makes a partial update on a resource
  5. DELETE - Deletes resource or related component
  6. HEAD - Retrieve response headers identical to those of a GET request, but without the response body.
  7. CONNECT - Establishes a tunnel to the server identified by the target resource
  8. OPTIONS - Describe the communication options for the target resource
  9. TRACE - Performs a message loop-back test along the path to the target resource
  10. <custom> - Some APIs use custom request methods such as LIST. Type in your custom methods.

基本介绍

MDN - HTTP Request Methods

HTTP 方法是用于指示请求的类型的动作的标准化方式。以下是常见的 HTTP 方法:

  1. GET: 从服务器检索资源。通常用于获取数据。
  2. POST: 向服务器发送数据以创建资源。常用于提交表单或上传文件。
  3. PUT: 向服务器发送数据以更新资源。通常用于更新现有资源的全部内容。
  4. PATCH: 向服务器发送部分数据以更新资源。通常用于部分更新资源。
  5. DELETE: 从服务器删除资源。
  6. HEAD: 检索资源的头部信息,类似于 GET 请求,但不返回资源的主体部分。
  7. OPTIONS: 返回服务器支持的所有 HTTP 方法。
  8. CONNECT: 建立一个到目标资源的隧道。主要用于代理服务器。
  9. TRACE: 执行一个消息环回测试,沿着路径到目标资源的请求的路由。

示例代码

这里是一个简单的使用 fetch 函数执行几种常见 HTTP 方法(get、post、put、patch、delete)的示例代码:

async function httpRequest(method: string, url: string, data?: any) {const options: RequestInit = {method: method,headers: {'Content-Type': 'application/json'},body: data ? JSON.stringify(data) : undefined};try {const response = await fetch(url, options);if (!response.ok) {throw new Error(`HTTP error! status: ${response.status}`);}const result = await response.json();return result;} catch (error) {console.error('Error:', error);}
}// 示例用法
const apiUrl = 'https://jsonplaceholder.typicode.com/posts';// GET 请求
httpRequest('GET', apiUrl).then(data => console.log(data));// POST 请求
httpRequest('POST', apiUrl, { title: 'foo', body: 'bar', userId: 1 }).then(data => console.log(data));// PUT 请求
httpRequest('PUT', `${apiUrl}/1`, { id: 1, title: 'foo', body: 'bar', userId: 1 }).then(data => console.log(data));// PATCH 请求
httpRequest('PATCH', `${apiUrl}/1`, { title: 'foo' }).then(data => console.log(data));// DELETE 请求
httpRequest('DELETE', `${apiUrl}/1`).then(data => console.log(data));

说明

  1. httpRequest: 一个通用的 HTTP 请求函数,接受 HTTP 方法、URL 和可选的数据。
  2. RequestInit: 用于配置 fetch 请求的选项,包括方法、头部和主体。
  3. fetch: 执行 HTTP 请求的 JavaScript API。

这个示例演示了如何使用 fetch 函数执行各种 HTTP 方法的请求。你可以根据需要调整 urldata 参数以匹配你的具体 API。

具体介绍

前置知识:幂等和非幂等

幂等性(Idempotency)是计算机科学中的一个重要概念,用于描述操作的可重复性和稳定性。在 HTTP 请求中,幂等性表示多次执行相同的请求应当产生相同的结果。

幂等操作

定义: 幂等操作是指无论操作执行多少次,产生的效果都相同。

HTTP 方法的幂等性:

  • GET: 幂等。多次执行 GET 请求会返回相同的资源数据,不会改变服务器状态。
  • PUT: 幂等。多次执行 PUT 请求将资源替换为相同内容,因此效果相同。
  • DELETE: 幂等。多次执行 DELETE 请求会删除资源,且删除不存在的资源不会再有变化。
  • HEAD: 幂等。多次执行 HEAD 请求会返回相同的头部信息,不会改变服务器状态。
  • OPTIONS: 幂等。多次执行 OPTIONS 请求会返回相同的支持方法列表,不会改变服务器状态。
  • TRACE: 幂等。多次执行 TRACE 请求会返回相同的路径信息,不会改变服务器状态。

非幂等操作

定义: 非幂等操作是指操作执行多次会产生不同的效果。

HTTP 方法的非幂等性:

  • POST: 非幂等。多次执行 POST 请求会创建多个资源,产生不同的结果。
  • PATCH: 通常非幂等。多次执行 PATCH 请求可能会导致资源的部分更新,产生不同的结果。尽管有时可以设计成幂等,但一般认为是非幂等的。

幂等性和非幂等性的应用场景

幂等性应用场景:

  • 数据读取: 使用 GET 方法读取数据,无论请求多少次,数据不会改变。
  • 资源替换: 使用 PUT 方法完全替换资源,多次请求结果相同。
  • 资源删除: 使用 DELETE 方法删除资源,多次请求结果一致。

非幂等性应用场景:

  • 数据创建: 使用 POST 方法创建新资源,每次请求都会产生新的资源。
  • 部分更新: 使用 PATCH 方法更新资源的部分内容,每次请求可能产生不同的结果。

总结

理解幂等性和非幂等性对于设计和实现可靠的 HTTP API 非常重要。幂等操作可以提高系统的稳定性和可预测性,而非幂等操作适合用于创建或部分更新资源。在实际开发中,选择合适的 HTTP 方法来满足业务需求,同时考虑幂等性,确保系统的健壮性和一致性。

1. GET

使用场景:

  • 用于从服务器获取资源数据,如网页、图片、JSON 数据等。
  • 适合只读取数据而不改变服务器状态的请求。

使用方法:

fetch('https://example.com/data').then(response => response.json()).then(data => console.log(data));

可能遇到的问题:

  • 缓存问题:浏览器可能缓存 GET 请求的响应,导致获取的不是最新数据。可以通过设置请求头或在 URL 中添加时间戳来避免。
  • URL 长度限制:有些浏览器对 URL 长度有限制,GET 请求参数太多时可能会出问题。

2. POST

使用场景:

  • 用于向服务器发送数据以创建新资源,例如提交表单、上传文件等。
  • 适合需要将数据发送到服务器进行处理的请求。

使用方法:

fetch('https://example.com/api', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ name: 'John', age: 30 })
}).then(response => response.json()).then(data => console.log(data));

可能遇到的问题:

  • 重复提交:用户可能会多次点击提交按钮,导致重复提交。可以通过禁用按钮或其他方式避免。
  • CSRF 攻击:需要防范跨站请求伪造攻击,通常通过使用 CSRF 令牌来防御。

3. PUT

使用场景:

  • 用于更新服务器上的现有资源的全部内容。
  • 适合需要完全替换资源的请求。

使用方法:

fetch('https://example.com/api/resource/1', {method: 'PUT',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ id: 1, name: 'John', age: 31 })
}).then(response => response.json()).then(data => console.log(data));

可能遇到的问题:

  • 幂等性:PUT 请求应当是幂等的,多次执行相同的 PUT 请求应当产生相同的结果。
  • 数据完整性:需要确保发送的数据是完整的,因为 PUT 是替换整个资源。

4. PATCH

使用场景:

  • 用于更新服务器上的资源的部分内容。
  • 适合需要部分更新资源的请求。

使用方法:

fetch('https://example.com/api/resource/1', {method: 'PATCH',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ age: 31 })
}).then(response => response.json()).then(data => console.log(data));

可能遇到的问题:

  • 部分更新:确保只发送需要更新的字段,避免影响其他字段。
  • 幂等性:虽然 PATCH 可以是非幂等的,但尽量使其幂等,即多次相同的 PATCH 请求应当产生相同的结果。

延伸

要确保 PATCH 请求是幂等的,可以采取以下几种策略:

1. 确保操作是幂等的

在服务器端处理 PATCH 请求时,确保每次相同的请求对资源产生相同的修改效果。这通常涉及在更新资源时使用幂等的方法。

示例: 更新用户的某个属性

// PATCH 请求体
{"age": 31
}

服务器接收到这个请求时,只更新 age 属性,不改变其他属性。

2. 使用版本控制或条件更新

通过检查资源的版本或条件来确保更新操作的幂等性。例如,可以使用乐观锁定或 If-Match 头来进行条件更新。

示例:

PATCH /resource/1 HTTP/1.1
Host: example.com
Content-Type: application/json
If-Match: "abc123"{"age": 31
}

服务器只有在资源的版本匹配 If-Match 头中提供的版本时才会进行更新,这样可以确保幂等性。

3. 全量更新部分属性

尽量在 PATCH 请求中提供所有需要更新的字段,即使某些字段的值没有变化。这确保了每次请求都是对特定字段的完整更新,而不是依赖于资源的当前状态。

示例:

// PATCH 请求体
{"name": "John","age": 31,"email": "john@example.com"
}

4. 使用特定操作指令

在 PATCH 请求体中明确指定操作类型,如 replaceaddremove 等。这些操作可以使用 JSON Patch 格式来表示。

JSON Patch 示例:

[{ "op": "replace", "path": "/age", "value": 31 }
]

服务器根据操作指令执行相应的更新,从而确保幂等性。

5. 幂等标识符

使用幂等标识符来确保每个请求只被处理一次。客户端生成一个唯一的幂等标识符,并在请求中发送给服务器。服务器在处理请求时检查这个标识符,确保每个标识符只处理一次。

示例:

PATCH /resource/1 HTTP/1.1
Host: example.com
Content-Type: application/json
Idempotency-Key: 123e4567-e89b-12d3-a456-426614174000{"age": 31
}

示例代码

以下是一个简单的 Node.js 服务器示例,展示如何实现幂等的 PATCH 请求:

const express = require('express');
const app = express();
app.use(express.json());let resource = { id: 1, name: 'John', age: 30, email: 'john@example.com' };
let processedRequests = {};app.patch('/resource/:id', (req, res) => {const idempotencyKey = req.headers['idempotency-key'];if (idempotencyKey && processedRequests[idempotencyKey]) {return res.status(200).send(processedRequests[idempotencyKey]);}const update = req.body;// Update resource in an idempotent wayif (update.name !== undefined) resource.name = update.name;if (update.age !== undefined) resource.age = update.age;if (update.email !== undefined) resource.email = update.email;const response = { message: 'Resource updated', resource };if (idempotencyKey) {processedRequests[idempotencyKey] = response;}res.status(200).send(response);
});app.listen(3000, () => {console.log('Server running on port 3000');
});

总结

确保 PATCH 请求幂等性的方法包括:

  1. 确保操作是幂等的:每次相同的请求应产生相同的结果。
  2. 使用版本控制或条件更新:如 If-Match 头。
  3. 全量更新部分属性:确保所有需要更新的字段都包含在请求中。
  4. 使用特定操作指令:如 JSON Patch 格式。
  5. 使用幂等标识符:确保每个请求只处理一次。

通过这些方法,可以确保 PATCH 请求的幂等性,从而提高系统的可靠性和一致性。

5. DELETE

使用场景:

  • 用于从服务器删除资源。
  • 适合需要删除资源的请求。

使用方法:

fetch('https://example.com/api/resource/1', {method: 'DELETE'
}).then(response => {if (response.ok) {console.log('Resource deleted');}});

可能遇到的问题:

  • 幂等性:DELETE 请求应当是幂等的,多次执行相同的 DELETE 请求应当产生相同的结果。
  • 资源不存在:需要处理删除不存在的资源的情况,通常返回 404 状态码。

6. HEAD

使用场景:

  • 用于检索资源的元数据,而不获取资源的主体部分。
  • 适合需要检查资源是否存在或获取资源的头部信息(如大小、类型)的请求。

使用方法:

fetch('https://example.com/data', {method: 'HEAD'
}).then(response => {if (response.ok) {console.log('Resource exists');}});

可能遇到的问题:

  • 信息有限:HEAD 请求只返回头部信息,不返回实际数据主体,需根据返回的头部信息判断资源状态。

7. OPTIONS

使用场景:

  • 用于查询服务器支持的请求方法。
  • 适合在跨域请求前检查服务器是否允许特定方法的请求。

使用方法:

fetch('https://example.com/api', {method: 'OPTIONS'
}).then(response => {if (response.ok) {console.log('Options:', response.headers.get('Allow'));}});

可能遇到的问题:

  • 复杂请求:在跨域资源共享 (CORS) 中,复杂请求需要先发送 OPTIONS 请求,检查服务器是否允许请求方法。更具体的内容可以阅读 WHAT - http headers 介绍(含 CORS 配置)

8. CONNECT

使用场景:

  • 用于建立到目标资源的隧道,主要用于代理服务器。
  • 适合在需要通过代理进行安全连接(如 HTTPS)的请求。

使用方法:
CONNECT 方法通常由浏览器或其他客户端自动处理,用户不直接使用。

可能遇到的问题:

  • 代理配置:确保代理服务器正确配置,以支持 CONNECT 方法。

9. TRACE

使用场景:

  • 用于执行消息环回测试,诊断路径问题。
  • 适合在开发和调试时检查请求的路径和中间代理的修改。

使用方法:
TRACE 方法通常由开发工具或诊断工具使用,用户不直接使用。

可能遇到的问题:

  • 安全问题:TRACE 方法可能被滥用进行跨站脚本攻击(XSS),许多服务器默认禁用 TRACE 方法。

总结

每个 HTTP 方法都有其特定的使用场景和可能遇到的问题。根据需求选择合适的方法,并注意相应的安全性和幂等性,确保请求的正确性和可靠性。

相关文章:

WHAT - 不同 HTTP Methods 使用场景、使用方法和可能遇到的问题

目录 前言基本介绍具体介绍前置知识&#xff1a;幂等和非幂等幂等操作非幂等操作幂等性和非幂等性的应用场景总结 1. GET2. POST3. PUT4. PATCH1. 确保操作是幂等的2. 使用版本控制或条件更新3. 全量更新部分属性4. 使用特定操作指令5. 幂等标识符示例代码总结 5. DELETE6. HEA…...

Pytorch使用教学4-张量的索引

1 张量的符号索引 张量也是有序序列&#xff0c;我们可以根据每个元素在系统内的顺序位置&#xff0c;来找出特定的元素&#xff0c;也就是索引。 1.1 一维张量的索引 一维张量由零维张量构成 一维张量索引与Python中的索引一样是是从左到右&#xff0c;从0开始的&#xff…...

【Git多人协作开发】同一分支下的多人协作开发模式

目录 0.前言场景 1.开发者1☞完成准备工作&协作开发 1.1创建dev分支开发 1.2拉取远程dev分支至本地 1.3查看分支情况和分支联系情况 1.4创建本地dev分支且与远程dev分支建立联系 1.5在本地dev分支上开发file.txt 1.6推送push至远程仓库 2.开发者2☞完成准备工作&…...

Vue使用FullCalendar实现日历/周历/月历

Vue使用FullCalendar实现日历/周历/月历 需求背景&#xff1a;项目上遇到新需求&#xff0c;要求实现工单以日/周/月历形式展示。而且要求不同工单根据状态显示不同颜色&#xff0c;一个工单内部&#xff0c;需要以不同颜色显示三个阶段。 效果图 日历 周历 月历 安装插件…...

社交圈子聊天交友系统搭建社交app开发:陌生交友发布动态圈子单聊打招呼群聊app介绍

系统概述 社交圈子部天交友系统是一个集成即时通讯、社区互动、用户管理等功能的在线社交平台。它支持用户创建个人资料&#xff0c;加入兴趣围子&#xff0c;通过文字、图片、语音、视频等多种方式进行交流&#xff0c;满足用户在不同场景下的社交需求 核心功能 -&#xff0c;…...

【微信小程序实战教程】之微信小程序原生开发详解

微信小程序原生开发详解 微信小程序的更新迭代非常频繁&#xff0c;几乎每个月都会有新版本发布&#xff0c;这就会让初学者感觉到学习的压力和难度。其实&#xff0c;我们小程序的每次版本迭代都是在现有小程序架构基础之上进行更新的&#xff0c;如果想要学好小程序开发技术&…...

PHP身份证实名认证接口集成守护电商购物

在这个万物互联的世界里&#xff0c;网购已成为日常生活中不可或缺的一部分。然而&#xff0c;随着线上交易的增加&#xff0c;如何保护消费者和商家免受欺诈&#xff0c;确保每一笔交易的安全&#xff0c;成了亟待解决的难题。这时&#xff0c;身份证实名认证接口应运而生&…...

为什么有了MAC还需要IP?

目录 MAC地址&#xff08;Media Access Control Address&#xff09;IP地址&#xff08;Internet Protocol Address&#xff09;为什么需要两者&#xff1f; IP地址和MAC地址在网络通信中扮演着不同的角色&#xff0c;它们各自有独特的功能和用途。下面是它们的主要区别和为什么…...

SpringBoot中如何使用RabbitMq

一&#xff0c;RabbitMQ简介和基本概念 RabbitMQ 是一个开源的消息中间件&#xff0c;基于 AMQP&#xff08;高级消息队列协议&#xff09;实现。 它由 Erlang 语言开发&#xff0c;并且支持多种编程语言&#xff0c;包括 Java、Python、Ruby、PHP 和 C# 等&#xff0c; 下载…...

LangChain自定义Embedding封装 之 ERNIE Bot

LangChain自定义Embedding封装 之 ERNIE Bot 百度飞浆平台的 ERNIE Bot 导入下面方法 和 环境 &#xff0c;即可验证 embedding ERNIE_Bot_embedding() class ERNIE_Bot_embedding(BaseModel, Embeddings):client: Anyroot_validator()def validate_environment(cls, value…...

Git 安装教程

1、登录git 官方网站&#xff1a;https://git-scm.com/ 点击左边的 Downloads 或者 右边标识的下载标志&#xff0c;它根据电脑操作系统自动匹配版本 Downloads for Windows 2、以 windows 为例下载对应版本 网络有时可能不大好&#xff0c;阿里镜像下载超快。 下载好以后&a…...

Lua 类管理器

Lua 类管理器 -- ***** Class Manager 类管理*****‘local ClassManager {}local this ClassManagerfunction ClassManager.Class(className, ...)print(ClassManager::Class)--print(className)-- 构建类local cls {__className className}--print(cls)-- 父类集合local …...

实现领域驱动设计(DDD)系列详解:领域模型的持久化

领域驱动设计主要通过限界上下文应对复杂度&#xff0c;它是绑定业务架构、应用架构和数据架构的关键架构单元。设计由领域而非数据驱动&#xff0c;且为了保证定义了领域模型的应用架构和定义了数据模型的数据架构的变化方向相同&#xff0c;就应该在领域建模阶段率先定义领域…...

配置sublime的中的C++编译器(.sublime-build),实现C++20

GCC 4.8: 支持 C11 (部分) GCC 4.9: 支持 C11 和 C14 (部分) GCC 5: 完全支持 C14 GCC 6: 支持 C14 和 C17 (部分) GCC 7: 支持 C17 (大部分) GCC 8: 完全支持 C17&#xff0c;部分支持 C20 GCC 9: 支持更多的 C20 特性 GCC 10: 支持大部分 C20 特性 GCC 11: 更全面地支持 C20 …...

Android14 - 前台Service、图片选择器 、OpenJDK 17、其他适配

前台服务 1. 指定前台服务类型 以 Android 14(API 级别 34)或更高版本为目标平台的应用,需要为应用中的每项前台服务指定服务类型,因为系统需要特定类型的前台服务满足特定用例。具体介绍如下: 在Android 10 在 <service> 元素内引入了 android:foregroundServiceT…...

数据恢复教程:如何从硬盘、SD存储卡、数码相机中恢复误删除数据。

您正在摆弄 Android 设备。突然&#xff0c;您意外删除了一张或多张图片。不用担心&#xff0c;您总能找到一款价格实惠的数据恢复应用。这款先进的软件可帮助 Android 用户从硬盘、安全数字 (SD) 或存储卡以及数码相机中恢复已删除的数据。 Android 上数据被删除的主要原因 在…...

谷粒商城实战笔记-47-商品服务-API-三级分类-网关统一配置跨域

文章目录 一&#xff0c;跨域问题1&#xff0c;跨域问题产生的原因2&#xff0c;预检请求3&#xff0c;跨域解决方案3.1 CORS (Cross-Origin Resource Sharing)后端配置示例&#xff08;Spring Boot&#xff09; 3.2 JSONP (JSON with Padding)3.3 代理服务器Nginx代理配置示例…...

stm32平台为例的软件模拟时间,代替RTC调试

stm32平台为例的软件模拟时间&#xff0c;代替RTC调试 我们在开发项目的时候&#xff0c;如果用到RTC&#xff0c;如果真正等待RTC到达指定的时间&#xff0c;那调试时间就太长了。 比如每隔半个小时&#xff0c;存储一次数据&#xff0c;如果要观察10次存储的效果&#xff0…...

《设计模式之美》读书笔记2

从Linux学习应对大型复杂项目的方法&#xff1a; 1、封装与抽象&#xff1a;封装了不同类型设备的访问细节&#xff0c;抽象为统一的文件访问方式&#xff0c;更高层的代码就能基于统一的访问方式&#xff0c;来访问底层不同类型的设备。这样做的好处是&#xff0c;隔离底层设备…...

C++ STL set_difference 用法

一&#xff1a;功能 给定两个集合A&#xff0c;B&#xff1b;计算集合的差集&#xff0c;即计算出那些只包含在A中而不包含在B中的元素。 二&#xff1a;用法 #include <vector> #include <algorithm> #include <iostream>int main() {std::vector<int&…...

【基础算法总结】优先级队列

优先级队列 1.最后一块石头的重量2.数据流中的第 K 大元素4.前K个高频单词4.数据流的中位数 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1…...

python-绝对值排序(赛氪OJ)

[题目描述] 输入 n 个整数&#xff0c;按照绝对值从大到小排序后输出。保证所有整数的绝对值不同。输入格式&#xff1a; 输入数据有多组&#xff0c;每组占一行&#xff0c;每行的第一个数字为 n ,接着是 n 个整数&#xff0c; n0 表示输入数据的结束&#xff0c;不做处理。输…...

成功者的几个好习惯,你具备了几个

每个人都想成为自己领域的佼佼者&#xff0c;然而&#xff0c;成功并非偶然&#xff0c;它往往与一系列良好的习惯紧密相连。这些习惯如同灯塔&#xff0c;指引着成功者在波涛汹涌的大海中稳健前行。 一、设定明确目标 没有明确的目标&#xff0c;就如同航海没有指南针&#…...

centos中zabbix安装、卸载及遇到的问题

目录 Zabbix简介Zabbix5.0和Zabbix7.0的区别监控能力方面模板和 API 方面性能、速度方面 centos7安装Zabbix(5.0)安装zabbix遇到的问题卸载Zabbix Zabbix简介 Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参…...

php编译安装

一、基础环境准备 # php使用www用户 useradd -s /sbin/nologin -M www二、下载php包 # 下载地址 https://www.php.net/downloads wget https://www.php.net/distributions/php-8.3.9.tar.gz三、配置编译安装 编译安装之前需要处理必要的依赖&#xff0c;在编译配置安装&…...

[K8S] K8S资源控制器Controller Manager(4)

文章目录 1. 常见的Pod控制器及含义2. Replication Controller控制器2.1 部署ReplicaSet 3. Deployment3.1部署Deployment3.2 运行Deployment3.3 镜像更新方式3.4 Deployment扩容3.5 滚动更新3.6 金丝雀发布(灰度发布)3.7 Deployment版本回退3.8 Deployment 更新策略 4. Daemon…...

C#,.NET常见算法

1.递归算法 1.1.C#递归算法计算阶乘的方法 using System;namespace C_Sharp_Example {public class Program{/// <summary>/// 阶乘&#xff1a;一个正整数的阶乘Factorial是所有小于以及等于该数的正整数的积&#xff0c;0的阶乘是1&#xff0c;n的阶乘是n&#xff0…...

KubeSphere介绍及一键安装k8s

KubeSphere介绍 官网地址&#xff1a;https://kubesphere.io/zh/ KubeSphere愿景是打造一个以 Kubernetes 为内核的云原生分布式操作系统&#xff0c;它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用&#xff08;plug-and-play&#xff09;的集成&#xff0…...

Spring 系列

SpringBoot 实体类&#xff08;Entity&#xff09;层 实体类&#xff08;Entity&#xff09;通常属于模型层&#xff08;Model Layer&#xff09;或领域层&#xff08;Domain Layer&#xff09;。它们代表应用程序中的核心业务数据结构&#xff0c;与数据库表结构紧密对应。在…...

基于opencv[python]的人脸检测

1 图片爬虫 这里的代码转载自&#xff1a;http://t.csdnimg.cn/T4R4F # 获取图片数据 import os.path import fake_useragent import requests from lxml import etree# UA伪装 head {"User-Agent": fake_useragent.UserAgent().random}pic_name 0 def request_pic…...

配置SSH公钥互信

目录 第一台主机&#xff1a;servera&#xff08;172.25.250.101&#xff09; 第一步&#xff1a;查看 . ssh目录下面是否为空 第二步&#xff1a;输入命令ssh-keygen 第三步&#xff1a; 再看查看一下. ssh目录 第四步&#xff1a; 输入命令 ssh-copy-id root172.25.250…...

WEB渗透Web突破篇-SQL注入(MSSQL)

注释符 -- 注释 /* 注释 */用户 SELECT CURRENT_USER SELECT user_name(); SELECT system_user; SELECT user;版本 SELECT version主机名 SELECT HOST_NAME() SELECT hostname;列数据库 SELECT name FROM master..sysdatabases; SELECT DB_NAME(N); — for N 0, 1, 2, ……...

DAY15

数组 冒泡排序 冒泡排序无疑是最为出名的排序算法之一&#xff0c;总共有八大排序 冒泡的代码还是相当简单的&#xff0c;两层循环&#xff0c;外层冒泡轮数&#xff0c;里层依次比较&#xff0c;江湖中人人尽皆知 我们看到嵌套循环&#xff0c;应该马上就可以得到这个算法的…...

pytest结合allure-pytest插件生成测试报告

目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压&#xff0c;解压之后还要配置环境变量&#xff08;把allure目录下bin目录配置到系统变量的path路径&#xff09;&#xff0c;下…...

详细解析用户提交咨询

上一篇文章中写到了使用Server-Sent Events (SSE)&#xff0c;并获取message里面的内容。 本篇文章主要是写&#xff0c;具体该如何实现的具体代码&#xff0c;代码见下方&#xff0c;可直接拿 async submitConsult() {this.scrollToBottom();if (!this.$checkLogin()) return;…...

UDP/TCP协议解析

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…...

力扣94题(java语言)

题目 思路 使用一个栈来模拟递归的过程&#xff0c;以非递归的方式完成中序遍历(使用栈可以避免递归调用的空间消耗)。 遍历顺序步骤&#xff1a; 遍历左子树访问根节点遍历右子树 package algorithm_leetcode;import java.util.ArrayList; import java.util.List; import…...

JavaScript基础入门:构建动态Web世界的基石

简要介绍JavaScript作为互联网上最流行的编程语言之一&#xff0c;它在构建交互式网页、动态Web应用及服务器后端&#xff08;通过Node.js&#xff09;中的重要性。强调学习JS对于任何想要进入Web开发领域的人来说是不可或缺的。 1. JavaScript是什么&#xff1f; 定义JavaSc…...

01-client-go

想学习K8S源码&#xff0c;可以加 &#xff1a;mkjnnm 1、介绍 client-go 是用来和 k8s 集群交互的go语言客户端库&#xff0c;地址为&#xff1a;https://github.com/kubernetes/client-go client-go 的版本有两种标识方式&#xff1a; v0.x.y (For each v1.x.y Kubernetes…...

WebRTC QoS方法十三.2(Jitter延时的计算)

一、背景介绍 一些报文在网络传输中&#xff0c;会存在丢包重传和延时的情况。渲染时需要进行适当缓存&#xff0c;等待丢失被重传的报文或者正在路上传输的报文。 jitter延时计算是确认需要缓存的时间 另外&#xff0c;在检测到帧有重传情况时&#xff0c;也可适当在渲染时…...

PHP进阶:前后端交互、cookie验证、sql与php

单词&#xff1a;construct 构造 destruct 摧毁 empty 空的 trim 修剪 strip 清除 slash 斜线 special 特殊 char 字符 query 询问 构造方法&#xff08;魔术方法&#xff09; 构造方法是一种特殊的函数&#xff0…...

优思学院|ANOVA方差分析是什么?如何用EXCEL进行计算?

在数据分析、六西格玛管理领域中&#xff0c;ANOVA&#xff08;方差分析&#xff09;是一种基本的统计工具&#xff0c;广泛用于确定三组或三组以上的独立群体之间的平均值是否存在统计学上的显着差异。ANOVA的主要目的在于评估一个或多个因素的影响&#xff0c;通过比较不同样…...

Mindspore框架循环神经网络RNN模型实现情感分类|(三)RNN模型构建

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…...

深度解读大语言模型中的Transformer架构

一、Transformer的诞生背景 传统的循环神经网络&#xff08;RNN&#xff09;和长短期记忆网络&#xff08;LSTM&#xff09;在处理自然语言时存在诸多局限性。RNN 由于其递归的结构&#xff0c;在处理长序列时容易出现梯度消失和梯度爆炸的问题。这导致模型难以捕捉长距离的依…...

安装好anaconda,打开jupyter notebook,新建 报500错

解决办法&#xff1a; 打开anaconda prompt 输入 jupyter --version 重新进入jupyter notebook&#xff1a; 可以成功进入进行代码编辑...

C++20之设计模式:状态模式

状态模式 状态模式状态驱动的状态机手工状态机Boost.MSM 中的状态机总结 状态模式 我必须承认:我的行为是由我的状态支配的。如果我没有足够的睡眠&#xff0c;我会有点累。如果我喝了酒&#xff0c;我就不会开车了。所有这些都是状态(states)&#xff0c;它们支配着我的行为:…...

数据库安全综合治理方案(可编辑54页PPT)

引言&#xff1a;数据库安全综合治理方案是一个系统性的工作&#xff0c;需要从多个方面入手&#xff0c;综合运用各种技术和管理手段&#xff0c;确保数据库系统的安全稳定运行。 方案介绍&#xff1a; 数据库安全综合治理方案是一个综合性的策略&#xff0c;旨在确保数据库系…...

人工智能:大语言模型提示注入攻击安全风险分析报告下载

大语言模型提示注入攻击安全风险分析报告下载 今天分享的是人工智能AI研究报告&#xff1a;《大语言模型提示注入攻击安全风险分析报告》。&#xff08;报告出品方&#xff1a;大数据协同安全技术国家工程研究中心安全大脑国家新一代人工智能开放创新平台&#xff09; 研究报告…...

【购买源码时有许多需要注意的坑】

购买源码时有许多需要注意的“坑”&#xff0c;这些坑可能会对项目的后续开发和使用造成严重影响。以下是一些需要特别注意的方面&#xff1a; 源码的完整性 编译测试&#xff1a;确保到手的源码能够从头至尾编译、打包、部署和功能测试无误。这一步非常关键&#xff0c;因为只…...

CAS的三大问题和解决方案

一、ABA问题的解决方案 变量第一次读取的值是1&#xff0c;后来其他线程改成了3&#xff0c;然后又被其他线程修改成了1&#xff0c;原来期望的值是第一个1才会设置新值&#xff0c;第二个1跟期望不符合&#xff0c;但是&#xff0c;可以设置新值。 解决方案&#xff1a; &a…...