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://www.mzph.cn/news/663509.shtml

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

相关文章

VUE PC端可拖动悬浮按钮

一、实现效果&#xff1a; 二、FloatButton.vue <template><div><div class"sssss"><div class"callback float" mousedown"down" touchstart"down" mousemove"move" touchmove"move" mous…

C语言——柔性数组

柔性数组概念&#xff1a; 这个概念你可能没听说过&#xff0c;但是这个概念确实存在&#xff0c;在C99中&#xff0c;结构体中最后一个成员允许是未知大小的数组&#xff0c;这就叫做【柔性数组】成员。 struct S {char c;int i;int arr[0];//未知大小的数组 - 柔性数组成员 }…

深度学习入门笔记(三)常用AI术语

本节我们介绍一些深度学习领域常用的术语。 训练 确定模型中的参数的过程,我们就称为“训练”。 Epoch 遍历一遍训练数据就叫作“一个 Epoch”。训练模型的时候,我们要告诉模型预计训练多少个 Epoch,但这个值并不是固定的,因为并没有一个准确的 Epoch 数能一定能得到一…

Java项目:基于SSM框架实现的西安旅游管理系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm811基于SSM框架实现的西安旅游管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

假如装修内行人给自己孩子装修,会有多用心?

假如装修师父给自己孩子装修&#xff0c;会怎么装呢&#xff1f;      雅静说买环保的材料&#xff0c;给你省几万块钱      给大家内行人装修&#xff0c;把环保&#xff0c;实用&#xff0c;省钱&#xff0c;都能拥有的方法      1&#xff0c;我不会换开发商给她…

Portainer访问远程Docker (TLS加密)

前言&#xff1a; docker的2375端口&#xff0c;出于安全性考虑即(Docker Remote API未授权访问漏洞)&#xff0c;是不开放的&#xff0c;如果想要管理远程docker&#xff0c;可以使用TLS机制来进行访问&#xff0c;这里以Portainer访问连接为例 文章参考&#xff1a;https://b…

【2023地理设计组一等奖】基于多元数据的新能源汽车充电站动态规划——以番禺区为例

作品介绍 1 设计思想 1.1 作品背景 据中国汽车工业协会统计,截至 2020 年底,我国新能源汽车保有量达到 480 万辆,占全球新能源汽车保有量的42%。然而,与之相对应的是,我国新能源汽车充电桩建设仍然滞后于需求,截至 2020 年底,我国公共充电桩数量仅为 79.4 万个,远低于…

单机搭建hadoop环境(包括hdfs、yarn、hive)

单机可以搭建伪分布式hadoop环境&#xff0c;用来测试和开发使用&#xff0c;hadoop包括&#xff1a; hdfs服务器 yarn服务器&#xff0c;yarn的前提是hdfs服务器&#xff0c; 在前面两个的基础上&#xff0c;课可以搭建hive服务器&#xff0c;不过hive不属于hadoop的必须部…

MacBook安装软件时允许任何来源的软件

MacBook安装软件时允许任何来源的软件 临时设置允许未知来源的app 当下载网上的软件并安装时,会安装失败, 因为MacOS默认只允许安装App Store上的软件 这时可以临时允许安装,如下设置 开启设置—->安全性与隐私—->未知来源的app 这种方式比较安全 设置允许任何来源…

计算机毕业设计 | SpringBoot 房屋租赁网 房屋租赁平台(附源码)

1&#xff0c;绪论 1.1 背景调研 在房地产行业持续火热的当今环境下&#xff0c;房地产行业和互联网行业协同发展&#xff0c;互相促进融合已经成为一种趋势和潮流。本项目实现了在线房产平台的功能&#xff0c;多种技术的灵活运用使得项目具备很好的用户体验感。 这个项目的…

2024年美国大学生数学建模比赛MCM问题A:资源可用性和性别比例-思路解析与代码解答

2024 MCM Problem A: Resource Availability and Sex Ratios 一、题目翻译 背景 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。…

【A题完整论文】2024美赛完整论文+代码参考(无偿分享)

A题&#xff1a;资源可用性和性别比例 一、问题分析 1.1 问题一分析 针对该问题&#xff0c;若七鳃鮼的性别比例受到外部环境因素的影响&#xff0c;那么这可能会导致种群大小和结构的变化。如果雌性在某些环境条件下更为优势&#xff0c;种群的增加可能对其他物种的竞争和资源…

闲聊电脑(4)硬盘分区

夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次你说的那个“分区”和“格式化”是什么意思&#xff1f; 冰箱&#xff1a;分区么&#xff0c;就是分…

数学建模 - 线性规划入门:Gurobi + python

在工程管理、经济管理、科学研究、军事作战训练及日常生产生活等众多领域中&#xff0c;人们常常会遇到各种优化问题。例如&#xff0c;在生产经营中&#xff0c;我们总是希望制定最优的生产计划&#xff0c;充分利用已有的人力、物力资源&#xff0c;获得最大的经济效益&#…

前端面试题-JavaScriptl原型,原型链?有什么特点?(2024.2.2)

一、先理解下构造函数&#xff0c;实例对象 &#xff08;看代码的打印结果和解释&#xff09; 构造函数&#xff08;Constructor&#xff09;的 prototype 属性&#xff1a; 当你创建一个函数时&#xff0c;JavaScript 会自动为该函数创建一个 prototype 属性。这个 prototype …

半桥式三相无刷直流电动机不同导通角的性能的变化

半桥式三相无刷直流电动机不同导通角的性能的变化 syms Omega clear clcOmega0pi/180*120 for Omega_x[pi/180*120,pi/180*130,pi/180*140,pi/180*150,pi/180*160,pi/180*170,pi/180*180]Omega_x*180/piOmega_x_0 (4*sin(Omega_x/2)/(Omega_xsin(Omega_x)))/(4*sin(Omega0/2)/…

2024美赛D题全保姆教程 代码思路

2024 ICM Problem D: Great Lakes Water Problem (最佳水位问题)题目要求 国际联合委员会&#xff08;IJC&#xff09;要求贵公司国际网络控制建模公司&#xff08;ICM&#xff09;提供支持&#xff0c;以协助管理和建模直接影响五大湖流量网络水位的控制机制&#xff08;两座…

使用gcc/g++查看C语言预处理,编译,汇编,连接,以及动静态库的区分

文章目录 使用gcc/ggcc如何完成编译后生成可执行文件&#xff1f;预处理(进行宏替换)编译&#xff08;生成汇编&#xff09;汇编&#xff08;生成机器可识别代码&#xff09;连接&#xff08;生成可执行文件或库文件&#xff09;最后记忆小技巧 在这里涉及到一个重要的概念&…

[css] 让文字进行竖着 分散对齐

.demo2 {width: 60px;background-color: aqua;height: 200px;display: grid;place-items: center;}参考&#xff1a; css 让文字进行竖着书写&#xff0c; 附带个小知识&#xff0c;行内块元素添加文字之后底部对不齐的问题

iOS 集成 Flutter Module

集成步骤 # Flutter flutter_application_path ./flutter_module_test/ load File.join(flutter_application_path, .ios, Flutter, podhelper.rb)target IntegrateFlutter douse_frameworks!# Flutterinstall_all_flutter_pods(flutter_application_path)end在主项目根目录下…