HTTP/1.1协议中的八种请求

2023年8月29日,周二晚上


目录

  • 概述八种请求
  • GET请求
  • POST请求
  • PUT请求
  • PATCH请求
  • DELETE请求
  • HEAD请求
  • OPTIONS请求
  • TRACE请求

概述八种请求

 HTTP/1.1协议中定义了8种常用的请求方法,分别是:
1. GET

  • 用途:请求指定的页面信息,并返回实体主体。
  • 例子:获取一个网页、图片等静态内容。

2. POST 

  • 用途:向指定资源提交数据进行处理(例如提交表单或上传文件)。
  • 例子:新增数据、发送评论。

3. PUT

  • 用途:向指定资源位置上传其最新内容。
  • 例子:更新已有资源。

4. PATCH 

  • 用途:更新资源的部分内容。
  • 例子:修改用户个人资料中的一部分字段。

5. DELETE

  • 用途:删除指定资源。
  • 例子:删除文章或评论。 

6. HEAD

  • 用途:获取报头中的元数据,但不返回实体内容。
  • 例子:查看资源是否存在。

7. OPTIONS 

  • 用途:获取信息,关于资源的哪些属性是客户端可以使用的。
  • 例子:检查后端API的功能。

8. TRACE

  • 用途:回显收到的请求,主要用于测试或诊断目的。
  • 例子:测试请求是否到达服务端。

这八种方法覆盖了大多数的CRUD(创建、读取、更新、删除)操作,在Web服务开发中广泛应用。

正确使用请求方法能提高效率和语义性。

GET请求

GET请求主要用于获取资源,其特征和用途如下:

  • 获取指定资源,如文件、记录等,不会修改资源。
  • 参数通过URL传递,长度限制一般在2KB。
  • 请求体为空,所有信息都在URL中。
  • 浏览器默认使用GET请求链接资源。

典型应用场景:

  • 获取网页或JSON数据接口信息。
  • 查询数据库记录或文件内容。
  • 下载静态资源如图片、视频等。
  • 搜索引擎抓取网页时使用GET。
  • 实现幂等操作,多次GET不会改变资源状态。

与POST不同点:

  • GET只获取资源,POST可创建/修改资源
  • GET参数在URL中,POST在请求体中
  • GET适合小数据量,POST无限制
  • GET请求结果可以缓存,POST不可以

所以总结来说,GET用于安全地获取资源,不会修改资源状态,它应用于数据量小且不涉及敏感信息的查询场景。

POST请求

 POST请求主要用于向服务器提交数据,以创建或修改资源,具有以下主要特征和用途:

  • 用于服务器端资源创建/修改,如发布文章、添加用户等会修改资源状态的操作。
  • 可以在请求体中发送结构化的数据,没有数据长度限制。
  • POST参数放在请求体中,不会暴露在URL上,较安全不适用于敏感数据GET。 
  • 可以向后端API传递复杂请求体,实现更丰富的功能,如远程调用。
  • 通常用于表单提交场景,如登录、注册、评论等。
  • POST请求结果一般不会被缓存。

POST请求的典型应用场景包括:

  • 登录系统提交用户名密码。
  • 注册用户信息到用户数据库。
  • 发布新文章/评论内容到网站。
  • 上传文件或图片到服务器。
  • 提交表单数据。
  • 调用远程API,向后端传递JSON请求体。
  • AJAX请求提交数据到后端不刷新页面。
  • 浏览器向后端提交搜索查询词。
  • 进行在线支付提交订单或付款信息。
  • 发起HTTP请求调用后端服务或功能。

与GET不同点:

  • GET只获取资源,POST可创建或修改资源
  • GET参数在URL中,POST在请求体中  
  • GET适合小数据量,POST无长度限制
  • GET结果可以缓存,POST不可以

所以总结来说,POST用于向服务器端提交数据以创建或修改资源,尤其适用于表单提交、文件上传等需要传输大数据的场景。

PUT请求

 PUT请求主要用于资源的完整替换,即完全更新一个资源。它的主要特征和用途如下:

  • 用来替换资源,完全更新资源的内容。
  • 如果请求的资源不存在,则创建该资源。
  • PUT请求必须提供请求体,指定更新的完整资源内容。
  • 通常情况下PUT是幂等操作,多次执行同样效果只是替换一次。

一些具体应用场景:

  • 更新用户个人资料中的所有字段。
  • 更新文章或评论的完整内容。 
  • 替换一个文件或图片的完整内容。
  • 更新资源的完整结构,如数据库表结构。

与PATCH相比:

  • PATCH用于局部更新资源的部分字段。
  • PUT用于完整替换资源的所有字段。

所以总体来说,PUT用于替换资源的完整内容,完全更新一个资源,而不是局部修改。它适用于需要完全覆盖原内容的场景。

PATCH请求

PATCH请求主要用于部分更新资源,即只更新资源的部分字段,而不是完整替换整个资源内容。

它的主要特征和用途:

  • 用于更新资源的部分属性,而不是完全替换资源。
  • PATCH请求必须在请求体中指明待更新的字段和新值。
  • 如果请求的资源不存在,则会报错而不是自动创建。
  • 通常情况下PATCH也是幂等操作。

一些具体应用场景:

  • 更新用户资料中的个别字段,如昵称、头像等。
  • 更新文章的标题或内容摘要而不是完整内容。
  • 更新商品的库存数量或价格而不是整个商品详情。 
  • 修改数据库表中的某些字段值。

与PUT的区别:

  • PUT用于完整替换资源内容
  • PATCH只更新资源的部分字段值

所以总体来说,PATCH用于更新资源的部分属性值,而不是完全替换整个资源,它可以更精细地控制更新的范围。

DELETE请求

 DELETE请求主要用于删除资源,其主要特征和用途如下:

  • 用于删除指定的资源,将其从服务器中完全移除。
  • DELETE请求没有请求体,所有信息都在请求URL中。
  • 如果资源不存在,服务器也会返回204状态码而不是404。
  • DELETE通常是幂等操作,多次删除同一个资源只会产生一次删除操作。

一些典型应用场景:

  • 删除文章、评论或其他内容资源。
  • 从购物车或收藏夹中移除商品。
  • 解除关注用户或删除好友关系。
  • 从数据库或存储系统中删除记录。
  • 删除文件或其他存储资源。

与PUT/PATCH不同的是:

  • PUT/PATCH更新资源内容
  • DELETE完全删除资源

所以总体来说,DELETE请求用于完全删除服务器上的某个资源,将其从存储系统中移除,而不是仅更新资源内容。它适用于需要彻底删除资源的场景。

HEAD请求

HEAD请求用于获取资源的元数据,而不是资源本身的内容。

它的主要特征和用适:

  • HEAD请求和GET请求一样,但不返回响应体内容,只返回响应报头。
  • 可以用来获取文件或页面的元数据,如大小、类型、最后修改时间等。
  • 由于没有传输正文内容,HEAD请求比GET请求更快和高效。

一些典型应用场景:

  • 检查文件是否存在,获取其属性信息但不下载文件。
  • 验证链接是否可用,获取页面信息但不传输整个页面。
  • 测试服务器性能,模拟GET但不传输内容体检测响应速度。
  • 网站分析,统计页面访问但不占用带宽下载正文。

与GET的区别:

  • GET返回完整响应包括报头和正文
  • HEAD只返回报头,不返回正文内容

所以总体来说,HEAD请求用于快速和高效地获取资源的元数据信息,而不需要传输整个内容体,它可以看作是只返回头部的GET请求。

OPTIONS请求

OPTIONS请求用于获取与资源相关的通信选项,并且获取该资源支持的HTTP请求方法。

主要特征和用途:

  • 不会对资源本身进行操作,仅用于获取资源相关信息。
  • 服务器会返回允许的请求方法类型,如GET、POST等。
  • 还会返回其他元信息,如请求头、实体主体等资源可以处理的信息。

典型应用场景:

  • 跨域请求前,了解服务器是否支持跨域请求。
  • 客户端检测Web服务是否支持某种操作,以便进行后续请求。
  • 测试链接是否可以访问,获取允许的操作类型。
  • 了解API接口支持的请求方式,比如只允许GET不允许POST。

与其他方法不同:

  • OPTIONS不对资源本身进行操作。
  • 它主要用于获取资源相关元信息,而非实际操作资源。

所以总体来说,OPTIONS请求用于获取资源的相关元信息,比如支持的请求方式,而不对资源本身进行任何实质性操作。

TRACE请求

TRACE请求是用于检测或诊断通信路径以及检测中间网关或服务器。

它的主要特征和用途:

  • 服务器将原样返回请求报文,包括请求头和请求体内容。
  • 可以用于测试请求是否正确传输,是否有被修改或过滤。
  • 可用于诊断客户端和服务器之间的通信链路问题。
  • 还可以获取服务器软件版本和其他系统信息。

一些典型应用场景:

  • 网络诊断,测试请求是否被中间设备修改或过滤。
  • 跟踪请求在各个节点的处理过程,调试通信问题。
  • 检测服务器软件和操作系统版本是否被修改。
  • 测试防火墙和代理是否允许TRACE请求通过。

与其他方法不同:

  • TRACE不对资源本身产生影响,只是原样返回请求。
  • 它主要用于诊断和测试通信质量,而非实际操作资源。

所以总体来说,TRACE请求用于测试和诊断客户端与服务器之间的通信质量,可以追踪请求在各个节点的处理过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊Http服务化改造实践

在微服务架构体系中远程RPC调用主要包括Dubbo与Http调用两个大类,由于Dubbo拥有服务注册中心,并且起服务的命名非常规范,使用包名.类名.方法名进行描述。 而http调用通常都是使用httpclient等相关类库,这些在使用上并没有问题&am…

Matlab(画图进阶)

目录 大纲 1.特殊的Plots 1.1 loglog(双对数刻度图) ​1.3 plotyy(创建具有两个y轴的图形) 1.4yyaxis(创建具有两个y轴的图) 1.5 bar 3D条形图(bar3) 1.6 pie(饼图) 3D饼图 1.7 polar 2.Stairs And Ste阶梯图 3.Boxplot 箱型图和Error Bar误差条形图 3.1 boxplot 3.2 …

微信小程序开发教学系列(12)- 实战项目案例

十二、实战项目案例 本章将通过一个简单的实战项目案例来帮助读者巩固之前学习到的知识。我们将搭建一个名为“ToDoList”的微信小程序,实现一个简单的任务清单功能。 项目介绍 ToDoList是一个用于记录和管理任务的小程序。用户可以添加、编辑、完成和删除任务&a…

Docker部署RustDesk Server 设置开机自启

三、Docker安装 Docker官方和国内daocloud都提供了一键安装的脚本,使得Docker的安装更加便捷。 官方的一键安装方式: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 国内 daocloud一键安装命令: curl -sSL https://…

Docker学习

文章目录 我的docker环境替换apt软件包镜像源docker安装以apt包管理器安装docker卸载 以docker官方存储库安装卸载 添加某用户到docker组配置docker镜像 docker命令学习操作守护进程相关命令操作镜像相关命令查看镜像搜索镜像拉取镜像删除镜像 操作容器相关命令查看容器创建容器…

索引 事务 存储引擎

################索引##################### 一、索引的概念 ●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 ●使用索引后可以不用扫描全表来…

Python算法——排序算法(冒泡、选择、插入、快速、堆排序、并归排序、希尔、计数、桶排序、基数排序)

本文章只展示代码实现 ,原理大家可以参考: https://zhuanlan.zhihu.com/p/42586566 一、冒泡排序 def bubble_sort(lst):for i in range(len(lst) - 1): # 表示第i趟exchange False # 每一趟做标记for j in range(len(lst)-i-1): # 表示箭头if ls…

Deepin 图形化部署 Hadoop Single Node Cluster

Deepin 图形化部署 Hadoop Single Node Cluster 升级操作系统和软件 快捷键 ctrlaltt 打开控制台窗口 更新 apt 源 sudo apt update更新 系统和软件 sudo apt -y dist-upgrade升级后建议重启 开启ssh服务 打开资源管理器 进入系统盘 找到 etc 目录 在系统盘的 etc 目录上 右键…

DB2和MYSQL的LOAD原理和比较测试

DB2 load的过程: (1)、装入阶段 装入阶段将源数据解析成物理数据页的格式,直接装入到数据页中。必要时还收集索引键和表统计信息。 (2)、构建索引阶段 根据在装入阶段收集的索引键创建表索引。 &#xff08…

使用 htmx 构建交互式 Web 应用

学习目标:了解htmx的基本概念、特点和用法,并能够运用htmx来创建交互式的Web应用程序。 学习内容: 1. 什么是htmx? - htmx是一种用于构建交互式Web应用程序的JavaScript库。 - 它通过将HTML扩展为一种声明性的交互式语言&a…

【校招VIP】前端校招考点之UDP

考点介绍: UDP是非面向连接协议,使用udp协议通讯并不需要建立连接,它只负责把数据尽可能发送出去,并不可靠,在接收端,UDP把每个消息断放入队列中,接收端程序从队列中读取数据。 『前端校招考点…

【leetcode 力扣刷题】汇总区间//合并区间//插入区间

一些关于区间的力扣题目 228. 汇总区间56. 合并区间57. 插入区间 228. 汇总区间 题目链接:228.汇总区间 题目内容: 看题目真是没懂这个题到底是要干啥……实际上题目要求的恰好覆盖数组中所有数字的最小有序区间范围列表,这个最小是指一个区…

使用Docker安装和部署kkFileView

🎈1 参考文档 kkFileView官方文档 🚀2 安装kkFileView 拉取Redis镜像。 docker pull keking/kkfileview启动docker容器。 docker run -it -d -p 8012:8012 keking/kkfileview --restart always解释: docker run redis # 从kkfileview镜像运行…

『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用

08 Qt Designer中容器布局和绝对布局的使用 1 容器布局1.1 设计容器布局1.2 保存文件并执行2 绝对布局2.1 设计绝对布局2.2 保存文件并执行1 容器布局 1.1 设计容器布局 先拖入一个容器Frame容器,然后拖入几个控件: 把拖入的控件拖入容器中: 选中容器,右键-布局-栅格布局:…

Python大数据处理利器之Pyspark详解

摘要: 在现代信息时代,数据是最宝贵的财富之一,如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架,为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark…

docker安装elasticsearch、kibana

安装过程中,遇到最大的问题就是在安装kibana的时候发现 一直连接不上 elasticsearch。最后解决的问题就是 我通过 ifconfig en0 | grep inet| awk {print $2} 在mac中找到本机的ip,然后去到kibana容器中 修改 vi config/kibana.yml中的elasticsearch.hos…

leetcode做题笔记125. 验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true ;否则&#…

Redis 学习笔记

文章目录 一、简介二、下载三、安装四、启动和关闭五、配置文件六、常用指令七、安全加固 版权声明:本文为CSDN博主「杨群」的原创文章,遵循 CC 4.0 BY-SA版权协议,于2023年9月3日首发于CSDN,转载请附上原文出处链接及本声明。 原…

父组件调用子组件 ref 不生效?组件暴露 ref ?

向你的组件暴露 ref 要暴露 ref 最关键的就是 forwardRef forwardRef 是 React 中的一个高阶函数,用于在函数组件中将 ref 属性向下传递给子组件。 在 React 中,我们可以使用 ref 属性来获取对一个组件实例的引用,以便在父组件中操作子组件。…

Dynamic ReLU:根据输入动态确定的ReLU

这是我最近才看到的一篇论文,它提出了动态ReLU (Dynamic ReLU, DY-ReLU),可以将全局上下文编码为超函数,并相应地调整分段线性激活函数。与传统的ReLU相比,DY-ReLU的额外计算成本可以忽略不计,但表示能力明显增强&…