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

HTTP请求传递参数方式【2024-02-01】

1、HTTP请求传递参数分类

1.1、按照请求方式分类

  • GET方法:通过查询字符串(Query String,每个参数由参数名和参数值组成,使用等号 = 连接,不同参数之间使用 & 符号分隔)的方式或直接将参数放在URL中来传递参数
  • POST方法:通过请求体(body)以表单形式或JSON数据格式等编码方式传递参数
  • PUT方法:与POST方法类似,通过请求体以JSON等格式传递参数,但PUT方法通常用于更新操作
  • DELETE方法:与POST方法类似,通过请求体以JSON等格式传递参数,但DELETE方法通常用于删除操作

在早期版本的HTTP中,只定义了GET和POST两种请求方法,用于获取和提交资源,然而,为了更好地支持RESTful架构和其他类型的操作,HTTP/1.1版本增加了PUT和DELETE这两种请求方法,使得开发者能够更灵活地设计和实现与资源相关的操作,尽管HTTP/1.1引入了PUT和DELETE请求方法,但其具体使用仍受到服务器和应用程序的支持与限制。不同的服务器和框架可能对PUT和DELETE请求方法有不同的处理方式和约束条件。

1.2、按照数据格式(Content-Type)分类

**Content-Type说明:**当参数放在 URL 中作为查询参数时,并没有 Content-Type。在这种情况下,请求头中并不包含 Content-Type 字段,当使用 GET 请求时,常见的方式是将参数直接附加在 URL 的查询字符串中,例如:https://example.com/api?param1=value1&param2=value2。这种方式不需要设置 Content-Type,因为参数是直接拼接在 URL 中的,而非放在请求体中。

Content-Type主要用于 POST、PUT 等通过请求体传递参数的请求方法,表示请求体中的数据类型。对于这些请求,参数通常会放在请求体中进行传输。在这种情况下,需要设置合适的 Content-Type 来指定请求体中数据的格式,如 application/x-www-form-urlencodedmultipart/form-dataapplication/json 等。

Content-Type分类:

application/x-www-form-urlencoded

一般用于 POST 请求数据的格式,它通常用于向服务器提交表单数据。在 application/x-www-form-urlencoded 格式中,请求参数被编码为键值对,每个键值对之间使用 “&” 符号进行分隔,键与值之间使用 “=” 符号进行分隔。键和值中的特殊字符会被转义成它们的 ASCII 码值的十六进制表示,即使用百分号 “%” 后跟两位十六进制数表示。其和 query 差不多,都是利用 &来拼接数据,也都要进行URL编码,只不过 form-urlencoded 把这个字符串放在 body 里了

application/x-www-form-urlencoded 请求示例:

POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencodedusername=john&password=123456

后端控制层代码:

@PostMapping("/api/login")
public ResponseEntity<String> login(@RequestParam("username") String username,@RequestParam("password") String password) {//……
}

multipart/form-data

通常用于提交包含文件上传等二进制数据的表单,--------- + 随机数做为分隔符。相比较于application/x-www-form-urlencoded编码方式,multipart/form-data能够支持更大的数据量和更多类型的数据。在使用multipart/form-data时,表单数据被分割成多个部分进行传输,每个部分都有自己的Content-Type,并且可以携带自己的额外信息(比如文件名、字符集等),因此也被称为多部分表单编码方式。multipart/form-data通常用于上传文件,因为它支持二进制数据的传输。当使用普通的application/x-www-form-urlencoded编码方式时,无法直接传输二进制数据,而multipart/form-data编码方式可以将文件以及其他表单字段一起作为请求体进行传输。

通过multipart/form-data编码方式,可以将文件的内容直接作为请求的一部分发送到服务器。在服务器端,可以通过解析multipart/form-data请求来处理文件上传操作,并将上传的文件保存到服务器的文件系统或进行其他的业务逻辑处理。

multipart/form-data请求的示例:

POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="example.jpg"
Content-Type: image/jpeg(二进制文件内容)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="title"Example title
----WebKitFormBoundary7MA4YWxkTrZu0gW--

后端控制层代码:

@PostMapping("/upload")
public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file,@RequestParam("title") String title) {//……
}

text/plain(raw,即原始数据)

一种简单的文本格式,没有特殊的格式要求和编码规则。通常,使用 text/plain 格式传输的数据只包含 ASCII 字符集中的字符,对于 Unicode 字符集中的字符可能会出现乱码情况。因此,在需要传输非 ASCII 字符集中的字符时,通常会选择使用其他格式,如 UTF-8 编码的文本格式(text/plain;charset=UTF-8)

text/plain 格式通常用于传输纯文本数据,例如 HTML、CSS 和 JavaScript 代码、日志记录等。在 HTTP 请求中,当 Content-Type 字段的值为 text/plain 时,服务器会将请求体中的数据作为纯文本进行处理。在 HTTP 响应中,当 Content-Type 字段的值为 text/plain 时,客户端会将响应体中的数据作为纯文本进行处理

application/xml

将XML格式的数据放置于请求体中传递,或者将服务器返回的XML格式数据作为响应体发送给客户端。

application/xml请求和响应的示例:

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/xml<user><name>John Doe</name><email>john.doe@example.com</email><age>30</age>
</user>

后端控制层:

@PostMapping("/api/users")
public ResponseEntity<User> createUser(@RequestBody User user) {//……
}

application/json

将参数以JSON格式编码并放置于请求体中传递,通常用于在HTTP请求和响应中传输JSON(JavaScript Object Notation)数据。JSON是一种轻量级的数据交换格式,易于读写和解析,并且被广泛用于Web应用程序和API中。

application/json请求示例:

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json{"name": "John Doe","email": "john.doe@example.com","age": 30
}

后端控制层:

@PostMapping("/api/users")
public ResponseEntity<User> createUser(@RequestBody User user) {//……
}

1.3、按照参数作用范围分类

①查询参数(Query Param):在GET方法中出现,以键值对的形式出现在URL的查询字符串中,用于过滤、排序等操作。在请求url后面加上?以键值对的方式传递参数,利用 &来分割数据

②路径参数(Path Param):在Get方法中出现,直接在 url 后面加上参数,后端使用占位符。

③请求体(Request Body):在POST、PUT和DELETE等方法中出现,用于传递请求的具体数据,通过Content-Type指明数据格式。

2、扩展

2.1、URL编码

URL中传递的参数通常都需要进行URL编码,以确保特殊字符不会破坏URL的结构。当使用带有占位符的URL时,需要将占位符中的实际值进行URL编码,并将编码后的值替换到相应的占位符位置。URL编码也称为百分号编码(Percent-encoding),它使用%XX的形式表示ASCII字符集中的非可打印字符和一些特殊字符。

例如,空格在URL中是不允许出现的,如果需要在URL中传递包含空格的字符串,就需要对空格进行编码。空格的ASCII码是32,它可以被编码为%20,因此传递包含空格的字符串时,应该将空格替换为%20。类似地,其他特殊字符也需要进行编码,例如“/”应该编码为“%2F”,“?”应该编码为“%3F”,等等。

浏览器和其他HTTP客户端通常会自动对URL中的参数进行编码,因此开发者不需要手动进行URL编码。在服务端,后台框架和程序库通常也提供了相关的API,用于解析和处理URL中的参数。无论是客户端还是服务端,在处理URL参数时,都应该遵守相应的规范和标准,以确保程序的正确性和安全性。

相关文章:

HTTP请求传递参数方式【2024-02-01】

1、HTTP请求传递参数分类 1.1、按照请求方式分类 GET方法:通过查询字符串&#xff08;Query String&#xff0c;每个参数由参数名和参数值组成&#xff0c;使用等号 连接&#xff0c;不同参数之间使用 & 符号分隔&#xff09;的方式或直接将参数放在URL中来传递参数POST…...

Error: Projects must list all files or use an ‘include‘ pattern.

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

移动应用开发的方式

移动应用开发的方式(三种) Native App&#xff1a; 本地应用程序&#xff08;原生App&#xff09; Web App&#xff1a;网页应用程序&#xff08;移动web&#xff09; Hybrid App&#xff1a;混合应用程序&#xff08;混合App&#xff09; hybrid应用场景 1、微信公众号&…...

C#学习笔记_类(Class)

类的定义 类的定义是以关键字 class 开始&#xff0c;后跟类的名称。类的主体&#xff0c;包含在一对花括号内。 语法格式如下&#xff1a; 访问标识符 class 类名 {//变量定义访问标识符 数据类型 变量名;访问标识符 数据类型 变量名;访问标识符 数据类型 变量名;......//方…...

壹[1],Xamarin开发环境配置

1&#xff0c;环境 VS2022 注&#xff1a; 1&#xff0c;本来计划使用AndroidStudio&#xff0c;但是也是一堆莫名的配置让人搞得很神伤&#xff0c;还是回归C#。 2&#xff0c;MAUI操作类似&#xff0c;但是很多错误解来解去&#xff0c;且调试起来很卡。 3&#xff0c;最…...

SAM:基于 prompt 的通用图像分割模型

Paper: Kirillov A, Mintun E, Ravi N, et al. Segment anything[J]. arXiv preprint arXiv:2304.02643, 2023. Introduction: https://segment-anything.com/ Code: https://github.com/facebookresearch/segment-anything SAM 是 Meta AI 开发的一款基于 prompt 的通用视觉大…...

2024美赛数学建模C题思路+模型+代码+论文

2024美赛A-F题思路代码模型论文&#xff1a;2.2开赛第一时间更新&#xff0c;获取见文末名片 美赛流程以及经验分享 今天主要和大家分享一下我之前参加美赛的经验&#xff0c;主要分两部分来讲。一部分是美赛流程&#xff0c;另一部分是美赛经验。 一 美赛流程 比赛前&#x…...

npm run serve和npm run dev的区别

1. 功能&#xff1a;通常&#xff0c;"npm run serve"用于启动开发服务器&#xff0c;提供实时的开发环境&#xff0c;支持自动重新加载和热模块替换。这样可以在开发过程中实时查看代码更改的效果。而"npm run dev"可以是一个自定义的指令&#xff0c;用于…...

已解决:winform开发中删除某方法导致窗体设计报错

一、报错截图 二、解决方案 第一步&#xff0c;点击上图的转到代码 第二步&#xff0c;注释掉报错的部分&#xff08;代码前面加//&#xff09; 第三步&#xff0c;重新编译 最后&#xff0c;恢复正常...

开源软件的影响力

开源软件如何推动技术创新 开源软件通过开放源代码,为全球开发者提供了共同的平台,促进了协作、交流,并推动了软件技术的创新和发展。以下是一些关键方面的分析: 透明度与信任: 开源软件的源代码是公开可见的,这种透明度带来了更高水平的信任。开发者和用户能够审查代码,…...

postgresql lc_ctype不同值之间的转换

LC_CTYPE 用于决定字元是否为数字,字母,空格,标点符号,及大小写等[1]。将 LC_CTYPE 设为「C」表示 isupper(c) 或 tolower(c) 等 C 语言函数[2]仅针对 US-ASCII 范围内的字元给出预期结果。因为像 upper()、lower() 或 initcap 这类型的Postgres SQL 语句是在libc 函数上实…...

纸盒生产ERP软件怎么样?常用纸盒生产ERP系统有哪几种

市场上的纸盒种类繁多&#xff0c;这些差异化的商品对应多元化的销售渠道和营销策略&#xff0c;日常的经营管理工作较为繁琐。而纸盒生产涉及原材料、发料、车间、工时评估、排产、质检、委外、工单等诸多流程&#xff0c;想要随时掌握各环节进度&#xff0c;及时处理存在的问…...

2024年重庆市考报名照上传失败的原因

2024年重庆市考报名照需要根据以下要求生成&#xff1a; 1、近期6个月&#xff0c;免冠证件照。 2、照片背景白底或者蓝底或者红底背景。 3、照片文件jpg格式&#xff0c;大小在20KB以下 4、照片像素大小&#xff0c;295*413像素 5、照片必须使用审核工具审核后才能上传...

2023年出版的新书中提到的《人月神话》(202402更新)(1)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《人月神话》于1975年出版&#xff0c;1995年出二十周年版。自出版以来&#xff0c;该书被大量的书籍和文章引用&#xff0c;直到现在热潮不退。 2023年&#xff0c;清华大学出版社推…...

gtkmm xml ui 例子(from string)

文章目录 前言来看一个从字符串中生成UI的例子 前言 glade生成的xml格式不被gtkmm4支持, 需要作修改 来看一个从字符串中生成UI的例子 #include <gtkmm/application.h> #include <gtkmm.h> #include <iostream> using namespace std;class ExampleWindow :…...

第2章 Linux 中执行命令

第2章 Linux 中执行命令 命令格式 命令 [选项] [参数....] 在linux 中命令分为内部命令和外部命令。 ctrll 可以清屏 查看帮助的命令 在使用命令之前&#xff0c;我们可以通过帮助来查看这个命令的格式和使用方式。在 Linux 中有两个帮助命令&#xff0c; help 和 man help…...

python3.8 安装缺少ssl、_ctypes模块解决办法

问题 安装pyhton3.8安装默认不依赖ssl 运行Flask项目时报错&#xff1a; Traceback (most recent call last):File "/usr/local/python3/bin/flask", line 8, in <module>sys.exit(main())File "/usr/local/python3/lib/python3.8/site-packages/flask…...

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 文章目录 一、基本概念 二、页面跳转 1.router基本概念 2.使用场景 3.页面跳转参数传递 三、页面返回 1.普通页面返回 2.页面返回前增加一个询问框 1.系统默认询问框 2.自定义询问框 总…...

【Git】多个托管平台Git账户配置

目录 多个托管平台GIt账户如何配置SSH 路由配置验证 用户名邮箱配置验证 多个托管平台GIt账户如何配置 通常情况&#xff0c;公司会搭建自己的gitlab代码托管服务或者将代码托管到第三方平台上&#xff0c;而我们自己的开源项目通常托管到Github上&#xff0c;每个托管平台都有…...

vue2 图片懒加载vue-lazyload 插件

1、npm install vue-lazyload --save 2、在项目的主文件&#xff08;例如 main.js&#xff09;中引入和使用插件&#xff1a; import Vue from vue import VueLazyload from vue-lazyloadVue.use(VueLazyload) 3、现在&#xff0c;你可以在需要懒加载图片的组件中使用 v-laz…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...

Linux入门(十五)安装java安装tomcat安装dotnet安装mysql

安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了&#xff0c;系统很多命…...

02-性能方案设计

需求分析与测试设计 根据具体的性能测试需求&#xff0c;确定测试类型&#xff0c;以及压测的模块(web/mysql/redis/系统整体)前期要与相关人员充分沟通&#xff0c;初步确定压测方案及具体的性能指标QA完成性能测试设计后&#xff0c;需产出测试方案文档发送邮件到项目组&…...

Redis专题-实战篇一-基于Session和Redis实现登录业务

GitHub项目地址&#xff1a;https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码&#xff1a;e34399f 基于Redis实现登录业务提交版本码&#xff1a;60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…...