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

探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解

文章目录

  • 前言
  • 一、GET 方法:用于获取资源
  • 二、POST 方法:用于提交数据
  • 三、PUT 方法:用于更新资源
  • 四、DELETE 方法:用于删除资源
  • 五、PATCH 方法:用于部分更新资源
  • 六、HEAD 方法:用于请求响应头
  • 七、OPTIONS 方法:用于查询支持的方法
  • 请求方法的幂等性
    • 1. 幂等操作
    • 2. 非幂等操作
  • 总结


前言

在 Web 开发中,HTTP 请求方法决定了客户端与服务器之间如何交流数据。无论使用 HTTP 还是 HTTPS 协议,这些请求方法都遵循相同的标准。
本文将深入探讨常见的请求方法(GET、POST、PUT、DELETE 等)的用法、适用场景及常见误区。


提示:以下是本篇文章正文内容,下面案例可供参考

一、GET 方法:用于获取资源

  • 作用
    GET 方法用于请求服务器中的资源,是最常用的请求方法。GET 请求的数据通过 URL 参数附带,适用于无副作用的查询操作,不会更改服务器数据。

  • 应用场景
    1、获取文章列表、商品详情等。
    2、不会产生数据更改的请求,如查看页面。

  • 特点
    1、数据在 URL 中传递,通常有长度限制。
    2、GET 请求是幂等的,多次请求相同资源不会影响结果。
    3、响应结果通常可以被缓存,提升页面加载速度。

示例:

GET /api/products?category=electronics HTTP/1.1
Host: example.com

二、POST 方法:用于提交数据

  • 作用
    POST 方法用于向服务器提交数据,并产生某种操作(如创建数据、提交表单等)。
    POST 请求的数据包含在请求体中,适用于创建新的资源或提交敏感数据。

  • 应用场景
    1、用户注册、登录提交表单。
    2、文件上传、产品添加等。

  • 特点
    1、数据在请求体中传递,无长度限制。
    2、POST 请求不是幂等的,多次相同的请求可能会创建重复的资源。
    3、不适合缓存,一般用于产生数据变更的操作。

示例:

POST /api/products HTTP/1.1
Host: example.com
Content-Type: application/json{"name": "Smartphone","price": 699,"category": "electronics"
}

三、PUT 方法:用于更新资源

  • 作用

  • PUT 方法用于更新服务器中的指定资源。客户端需要向服务器发送完整的更新内容,以替换原有资源的内容。

  • 应用场景
    1、更新用户信息、修改订单状态等。
    2、适合资源的完整更新操作。

  • 特点
    1、幂等操作:多次发送相同 PUT 请求不会产生额外影响。
    2、通常需要资源的唯一标识符(如 ID)来确定更新目标。

示例:

PUT /api/products/1 HTTP/1.1
Host: example.com
Content-Type: application/json{"name": "Updated Smartphone","price": 749
}

四、DELETE 方法:用于删除资源

  • 作用
    DELETE 方法用于删除服务器中的指定资源,适用于移除资源的操作。

  • 应用场景
    删除用户账户、取消订单等。

  • 特点
    1、幂等操作:多次发送相同的 DELETE 请求不会改变结果。
    2、通常用于资源的不可逆操作,删除成功后资源将不再存在。

示例:

DELETE /api/products/1 HTTP/1.1
Host: example.com

五、PATCH 方法:用于部分更新资源

  • 作用
    PATCH 方法用于对资源进行部分更新,适用于只更新某些字段,而不需要发送完整的数据。

  • 应用场景
    更新用户信息的部分字段,如修改用户昵称或状态。

  • 特点
    1、不是幂等的(根据实现方式),但通常用于细粒度的更新。
    2、比 PUT 更灵活,不需要提供完整数据。

示例:

PATCH /api/products/1 HTTP/1.1
Host: example.com
Content-Type: application/json{"price": 725
}

六、HEAD 方法:用于请求响应头

  • 作用
    HEAD 方法仅请求资源的响应头而不返回具体内容,适用于检查资源的状态或可用性。

  • 应用场景
    1、检查文件是否存在,获取文件的元信息等。
    2、适用于快速检测资源更新情况。

  • 特点
    1、不返回响应体,仅包含响应头信息。
    2、幂等操作,不会影响服务器状态。
    示例:

HEAD /api/products/1 HTTP/1.1
Host: example.com

七、OPTIONS 方法:用于查询支持的方法

  • 作用
    OPTIONS 方法用于查询服务器支持的 HTTP 方法列表,可用于检查跨域请求的有效性。

  • 应用场景
    1、跨域资源共享(CORS)验证。
    2、查询服务器支持的功能。

  • 特点
    不会对资源造成影响,通常仅返回可用方法列表。

示例:

OPTIONS /api/products HTTP/1.1
Host: example.com

请求方法的幂等性

1. 幂等操作

GET、PUT、DELETE、HEAD 和 OPTIONS 是幂等的,重复请求不会产生额外影响。

定义:幂等操作是指无论请求执行多少次,其对服务器资源的最终影响都是相同的。换句话说,连续多次发送相同请求,不会改变服务器的最终状态。

特点
幂等操作保证了多次执行的安全性,例如网络重试机制中,可以重复发送幂等请求而不会造成不良影响。
常见的幂等请求方法有 GET、PUT、DELETE、HEAD 和 OPTIONS。

  • 举例
    GET 请求:获取资源,不会修改数据,所以多次请求不会影响服务器。
    PUT 请求:用于更新资源,发送相同的更新内容多次不会改变结果(例如连续多次更新用户信息为同样的内容)。
    DELETE 请求:删除资源,多次删除同一资源后,服务器的最终状态都是“资源不存在”。
    HEAD 请求 :HEAD 请求方法用于获取资源的响应头,而不返回实际的响应体内容。它通常用于检查资源是否存在或查询其元数据(如内容类型、长度等)

2. 非幂等操作

POST、PATCH 是非幂等的,多次请求可能产生不同结果。

定义:非幂等操作是指多次执行相同请求会对服务器资源产生不同的影响,每次请求可能导致不同的结果。

特点
非幂等操作不能保证重复请求的安全性,连续请求会导致服务器状态不断变化。
常见的非幂等请求方法有 POST 和 PATCH。

  • 举例
    POST 请求:用于创建资源,每次发送请求都会创建新数据。例如,每次提交表单都会新增一条记录。
    PATCH 请求:用于部分更新,可能因为修改的内容或执行的次数不同,导致服务器的资源状态发生变化(如增加计数器值)。

总结

在实际开发中,根据不同的业务需求,合理选择 HTTP 请求方法可以提升接口设计的清晰度、可靠性和安全性。GET 和 POST 是最常见的请求方法,而 PUT、DELETE、PATCH 则为 RESTful API 提供了更强的资源管理能力。

相关文章:

探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解

文章目录 前言一、GET 方法:用于获取资源二、POST 方法:用于提交数据三、PUT 方法:用于更新资源四、DELETE 方法:用于删除资源五、PATCH 方法:用于部分更新资源六、HEAD 方法:用于请求响应头七、OPTIONS 方…...

前端项目中,public文件下的system.js有什么作用

‌SystemJS在前端项目中的作用主要包括模块加载、资源管理和兼容性处理。‌ 模块加载 SystemJS是一个通用的模块加载器,支持多种模块规范,包括CommonJS、AMD、全局模块对象和ES6模块。通过使用插件,它还可以加载CoffeeScript和TypeScript。…...

odoo-040 odoo17前端的js方法调用后端py方法action报错

文章目录 问题描述梳理写法xml写法前端方法后端action的写法 错误解释 问题描述 在前端的kanban视图上添加了几个自定义按钮,按钮点击可以跳转到对应的tree视图,在写按钮调用方法的时候报错如下: 前端调用后端action报错: actio…...

图形 2.7 LDR与HDR

LDR与HDR B站视频:图形 2.7 LDR与HDR 文章目录 LDR与HDR基本概念LDRHDR为什么需要HDR不同显示屏的差异 Unity中的HDRCamera HDR 设置Lightmap HDR设置拾色器 HDR设置优缺点 HDR与Bloom通常Bloom渲染步骤渲染出原图获取图像中较亮部分高斯模糊叠加 Unity中Bloom渲染…...

DP动态规划基础题(Kadane算法)

动态规划(Dynamic Programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学等领域中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划算法通常用于优化问题,特别是那…...

[UnLua]动态创建SceneCapture2d相机,并且添加渲染目标纹理

在 Unlua 开发中,相机相关的操作是构建场景视觉效果的重要部分。以下我们来详细分析一段涉及相机实例化和为相机赋予纹理目标的 Unlua 代码。 -- 实例化相机local World self:GetWorld()maskCamera World:SpawnActor(UE.ASceneCapture2D)-- 给相机赋值纹理目标lo…...

【leetcode练习·二叉树】用「分解问题」思维解题 I

本文参考labuladong算法笔记[【强化练习】用「分解问题」思维解题 I | labuladong 的算法笔记] 105. 从前序与中序遍历序列构造二叉树 | 力扣 | LeetCode | 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵…...

【gitlab-ce】各组件介绍

主要组件功能接介绍(chatgpt回答的) nginx:作为Web服务器和反向代理,用于访问GitLab的Web界面。可以关闭,但会导致无法通过Web界面访问GitLab。prometheus_monitoring:提供监控和报警功能,收集和…...

PostgreSQL分区表:基础语法与运维实践

引言 简介:什么是数据库分区 数据库分区是一种将大型表物理上分割成多个较小的部分的技术。每个部分称为一个分区,这些分区可以分布在不同的存储设备上,以提高查询性能和管理效率。 为什么使用分区表 提高查询性能:通过减少需…...

Docker入门系列——DockerFile的使用

前面了解了Docker的基本概念,今天来认识一下DockerFile。 Dockerfile 是一个文本文件,包含一系列指令来组装 Docker 镜像。每个指令执行一个特定动作,例如安装包、复制文件或定义启动命令。正确使用 Dockerfile 指令对于构建高效容器至关重要…...

数据集平台分享

Kaggle: Your Machine Learning and Data Science CommunityKaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals.https://www.kaggle.com/Kaggle 包含非常丰富的数据集和代码,…...

去地面算法——depth_clustering算法调试(1)

1 源码下载 论文: 《2016-Fast Range Image-Based Segmentation of Sparse 3D Laser Scans for Online Operation》 《2017-Efficient Online Segmentation for Sparse 3D Laser Scans》 代码:git链接 2 问题记录 2.1 无法找到qt问题 问题截图&…...

设计模式-七个基本原则之一-单一职责原则 + SpringBoot案例

单一职责原理:(SRP) 面向对象七个基本原则之一 清晰的职责:每个类应该有一个明确的职责,避免将多个责任混合在一起。降低耦合:通过将不同的职责分开,可以降低类之间的耦合度,提高系统的灵活性。易于维护:当…...

HWA高速辅助驾驶系统组成及功能场景

HWA最基本功能包括智能跟车、拨杆变道、压速变道、车道居中保持等功能,有效减轻驾驶疲劳。随着智能驾驶不断走向成熟,HWA升级到高速自动驾驶HWP,可实现智能避让汇入口、智能避让大车、分心/疲劳监测、智能进出匝道、智能判别易混分叉路口、智…...

SpringMVC学习笔记(一)

一、SpringMVC的基本概念 (一)三层架构和MVC 1、三层架构概述 我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中&…...

kaggle 如何利用API下载数据集

首先 上传kaggle官网生成得 API 密钥: kaggle.json 文件。放到该代码同目录下,再运行一下代码。 注: 只需要修改下载竞赛数据集,就可以选择你的指定数据集。 jupyter文件运行 #首先 上传 kaggle.json 文件并设置 API 密钥 #再…...

第一个 Flutter 项目(1)共46节

前端开发工具vs code,安装Flutter sdk,如果你的下载速度比较慢,可以选择这个😄 flutter sdk 解压码:stwq 配置可以看这Flutter 新建工程一直等待 解决办法-CSDN博客 如果你是新的 Flutter 开发者,我们建…...

学术论文写作丨机器学习与深度学习

目录 第一章、ChatGPT-4o使用方法与技巧 第二章、ChatGPT-4o辅助文献检索、总结与分析 第三章、ChatGPT-4o辅助学术论文选题、创新点挖掘与实验方案设计 第四章、ChatGPT-4o辅助学术论文开题与大纲生成 第五章、ChatGPT-4o辅助学术论文写作马拉松活动介绍 第六章、ChatGP…...

导-4涉及的知识点

除了本课题,3D结构几何修复领域还有以下一些值得关注的研究: 1. **Poisson图像编辑**: 成功地将给定的纹理块融合到可能完全不同的背景图像上。 2. **张量投票(TV)框架**: - 讨论了使用张量投票框架进…...

从0开始深度学习(28)——序列模型

序列模型是指一类特别设计来处理序列数据的神经网络模型。序列数据指的是数据中的每个元素都有先后顺序,比如时间序列数据(股票价格、天气变化等)、自然语言文本(句子中的单词顺序)、语音信号等。 1 统计工具 前面介绍…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...