前端往后端传递参数的方式有哪些?
文章目录
- 1. URL 参数
- 1.1. 查询参数(Query Parameters)
- 1.2. 路径参数(Path Parameters)
- 2. 请求体(Request Body)
- 2.1. JSON 数据
- 2.2. 表单数据
- 2.3. 文件上传
- 3. 请求头(Headers)
- 3.1. 自定义请求头
- 4. Cookie
- 5. WebSocket 或其他协议
- 总结
前端往后端传递参数的方式有多种,主要根据传递的上下文(如 URL、请求体、请求头等)以及所使用的 HTTP 方法来决定。
1. URL 参数
1.1. 查询参数(Query Parameters)
- 定义:
- 通过 URL 的查询字符串传递参数。
- 查询字符串的格式通常为
key=value,多个参数用&分隔。
- 示例:
- URL:
http://example.com/api/user?id=123&name=John - 后端获取参数:
- 在 Java(Spring Boot)中:
@RequestParam@GetMapping("/api/user") public ResponseEntity<User> getUser(@RequestParam("id") int id, @RequestParam("name") String name) {// 参数 id 和 name 会自动解析return ResponseEntity.ok(...); }
- 在 Java(Spring Boot)中:
- URL:
- 特点:
- 参数是明文的,容易被看到。
- 适合传递少量的、不敏感的数据,例如过滤条件、排序字段等。
1.2. 路径参数(Path Parameters)
- 定义:
- 参数直接作为 URL 路径的一部分传递。
- 示例:
- URL:
http://example.com/api/user/123(123是路径参数) - 后端获取参数:
- 在 Java(Spring Boot)中:
@PathVariable@GetMapping("/api/user/{id}") public ResponseEntity<User> getUser(@PathVariable("id") int id) {// 参数 id 会自动解析return ResponseEntity.ok(...); }
- 在 Java(Spring Boot)中:
- URL:
- 特点:
- 参数以路径的形式传递,直观且便于 RESTful API 的设计。
- 常用于标识特定资源的参数(如 ID)。
2. 请求体(Request Body)
2.1. JSON 数据
- 定义:
- 前端通过 JSON 格式的字符串将参数传递到后端,通常用于
POST、PUT、PATCH等请求方法。
- 前端通过 JSON 格式的字符串将参数传递到后端,通常用于
- 示例:
- 请求体内容(JSON):
{"id": 123,"name": "John","email": "john@example.com" } - 前端发送:
fetch('http://example.com/api/user', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ id: 123, name: 'John', email: 'john@example.com' }) }); - 后端获取参数:
- 在 Java(Spring Boot)中:
@RequestBody@PostMapping("/api/user") public ResponseEntity<User> createUser(@RequestBody User user) {// 参数 user 会自动绑定return ResponseEntity.ok(...); }
- 在 Java(Spring Boot)中:
- 请求体内容(JSON):
- 特点:
- 格式灵活,适合传递复杂的数据结构(如对象、数组等)。
- 是现代前后端分离项目中最常用的方式之一。
2.2. 表单数据
- 定义:
- 前端通过表单提交键值对形式的数据。
- 示例:
- 表单形式:
<form action="http://example.com/api/user" method="POST"><input type="text" name="name" value="John" /><input type="email" name="email" value="john@example.com" /><button type="submit">Submit</button> </form> - 前端使用
application/x-www-form-urlencoded:const data = new URLSearchParams(); data.append('name', 'John'); data.append('email', 'john@example.com');fetch('http://example.com/api/user', {method: 'POST',headers: { 'Content-Type': 'application/x-www-form-urlencoded' },body: data.toString() }); - 后端获取参数:
- 在 Java(Spring Boot)中:
@RequestParam或@ModelAttribute@PostMapping("/api/user") public ResponseEntity<User> createUser(@RequestParam String name, @RequestParam String email) {// 参数 name 和 email 会自动解析return ResponseEntity.ok(...); }
- 在 Java(Spring Boot)中:
- 表单形式:
- 特点:
- 简单易用,但对于复杂的数据结构(如嵌套对象、数组)不适合。
- 表单数据默认编码为
application/x-www-form-urlencoded。
2.3. 文件上传
- 定义:
- 通过
multipart/form-data传递文件或其他表单数据。
- 通过
- 示例:
- 表单形式:
<form action="http://example.com/api/upload" method="POST" enctype="multipart/form-data"><input type="file" name="file" /><button type="submit">Upload</button> </form> - 前端发送:
const formData = new FormData(); formData.append('file', fileInput.files[0]);fetch('http://example.com/api/upload', {method: 'POST',body: formData }); - 后端获取参数:
- 在 Java(Spring Boot)中:
@RequestParam或MultipartFile@PostMapping("/api/upload") public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {// 获取文件内容return ResponseEntity.ok("File uploaded successfully!"); }
- 在 Java(Spring Boot)中:
- 表单形式:
- 特点:
- 适合传递文件数据,支持文本、文件混合上传。
- 表单需要设置
enctype="multipart/form-data"。
3. 请求头(Headers)
3.1. 自定义请求头
- 定义:
- 前端通过 HTTP 请求头传递参数。
- 示例:
- 前端发送:
fetch('http://example.com/api/user', {method: 'GET',headers: {'Authorization': 'Bearer token123','Custom-Header': 'CustomValue'} }); - 后端获取参数:
- 在 Java(Spring Boot)中:
@RequestHeader@GetMapping("/api/user") public ResponseEntity<User> getUser(@RequestHeader("Authorization") String authToken) {// 参数 authToken 会自动解析return ResponseEntity.ok(...); }
- 在 Java(Spring Boot)中:
- 前端发送:
- 特点:
- 适合传递与请求相关的元数据,例如认证信息(
Authorization)、客户端信息(User-Agent)等。 - 不适合传递大数据量的参数。
- 适合传递与请求相关的元数据,例如认证信息(
4. Cookie
- 定义:
- 参数存储在浏览器的 Cookie 中,前端通过设置 Cookie 传递给后端。
- 示例:
- 前端设置 Cookie:
document.cookie = "userId=123; path=/"; - 后端获取参数:
- 在 Java(Spring Boot)中:
@CookieValue@GetMapping("/api/user") public ResponseEntity<User> getUser(@CookieValue("userId") String userId) {// 参数 userId 会自动解析return ResponseEntity.ok(...); }
- 在 Java(Spring Boot)中:
- 前端设置 Cookie:
- 特点:
- 参数会自动附带在每次请求中(如果 Cookie 的域和路径匹配)。
- 常用于存储用户会话信息。
- 不适合存储敏感数据,需结合 HTTPS 和安全标志(
HttpOnly、Secure)。
5. WebSocket 或其他协议
- 前端通过 WebSocket 或其他通信协议传递参数,适用于实时通信场景。
- 示例:
- WebSocket 通信:
socket.send(JSON.stringify({ type: 'message', content: 'Hello' })); - 后端通过监听解析传递的消息。
- WebSocket 通信:
总结
前端往后端传递参数的方式选择取决于具体的场景需求:
| 方式 | 适用场景 |
|---|---|
| URL 查询参数 | 适合传递少量、不敏感的数据,如分页参数、搜索条件等。 |
| URL 路径参数 | 适合 RESTful API,用于标识特定资源(如用户 ID)。 |
| JSON 请求体 | 现代 Web 开发中最常用,适合传递复杂的数据结构。 |
| 表单数据 | 简单表单提交,适合传递少量键值对。 |
| 文件上传 | 文件和其他表单混合上传。 |
| 请求头 | 传递元数据(如认证令牌、客户端信息)。 |
| Cookie | 用户会话信息和状态保持。 |
根据实际需求选择合适的方式即可。
相关文章:
前端往后端传递参数的方式有哪些?
文章目录 1. URL 参数1.1. 查询参数(Query Parameters)1.2. 路径参数(Path Parameters) 2. 请求体(Request Body)2.1. JSON 数据2.2. 表单数据2.3. 文件上传 3. 请求头(Headers)3.1. 自定义请求…...
Vue axios 异步请求,请求响应拦截器
在 Vue.js 中使用 axios 进行网络请求是非常常见的做法,因为它提供了比原生的 Fetch API 更丰富的功能,并且更易于处理错误和配置。结合 Axios 的拦截器功能,你可以对所有的请求或响应进行预处理,比如添加认证头信息、统一处理错误…...
yarn install 安装报错:Workspaces can only be enabled in private projects.
在本地运行项目的时候,使用yarn install 安装模块依赖的时候,遇到报错:Workspaces can only be enabled in private projects. 一、原因分析 报这个错误是因为你使用了yarn的workspace,但并未将工程标记为private。 二、解决办法 …...
http 请求总结get
关于get请求传递body的问题 错误代码 有400 , 415 等情况 <!doctype html><html lang"zh"><head><title>HTTP Status 400 – 错误的请求</title><style type"text/css">body {font-family:Tahoma,Arial,sans-seri…...
TCP 和 UDP 的区别:解析网络传输协议
引言 在计算机网络的世界中,TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种极为重要且应用广泛的传输层协议。它们在功能、特性以及适…...
【已解决】pyinstaller打包ico图片报错:OSError: [WinError 225] 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。
起因: pyinstaller加上 --icon 参数打包时报错。 命令如下: 解决: 关闭 Windows 的病毒防护即可,步骤如下。 点屏幕右下角通知栏,进入“病毒和威胁防护”: 打开: 关闭实时保护(…...
SpringBoot项目配置文件的优先级
从外部讲 内部讲 所以优先级是:外部的config里的application.yml最高 然后是外部与jar包同目录下的application.yml 再到内部的classpath下config下的application.yml 最后到classpath下的application.yml 最后来个优先级最高的 启动时候 指定spring.config.location…...
JS中类型化数组(Typed Arrays)详解和常见应用场景
在JavaScript中,类型化数组(Typed Arrays) 是用于处理二进制数据的对象。它们允许我们以一种高效的方式操作和存储大量的数值数据,特别适合处理类似于图像、音频、视频等场景的原始二进制数据。 类型化数组的基本概念 类型化数组…...
虚幻引擎是什么?
Unreal Engine,是一款由Epic Games开发的游戏引擎。该引擎主要是为了开发第一人称射击游戏而设计,但现在已经被成功地应用于开发模拟游戏、恐怖游戏、角色扮演游戏等多种不同类型的游戏。虚幻引擎除了被用于开发游戏,现在也用于电影的虚拟制片…...
LabVIEW生物医学信号虚拟实验平台
介绍了一款基于LabVIEW的多功能生物医学信号处理实验平台的设计和实现。平台通过实践活动加强学生对理论的理解和应用能力,特别是在心电图(ECG)和脑电图(EEG)的信号处理方面。实验平台包括信号的滤波、特征提取和频谱分析等功能,能直观体验和掌握生物医学…...
【软件工程】十万字知识点梳理 | 期末复习专用
原创文章,禁止转载。 文章目录 图CRC卡片用例图类图状态图活动图泳道图软件质量因素自顶向下集成自底向上集成人员与工作量之间的关系时序图关键路径软件结构基本路径测试判定表数据流图(DFD)体系结构设计问题数据字典挣值分析等价划分程序流程图PAD | N-S燃尽图甘特图对象模…...
Android --- 在AIDL进程间通信中,为什么使用RemoteCallbackList 代替 ArrayList?
1.RemoteCallbackList vs ArrayList RemoteCallbackList 是一个特殊的 List,它用来管理跨进程的回调,特别是当回调对象是在不同进程中时。它在 AIDL(Android Interface Definition Language)通信中常常用来处理跨进程的通信。 Arr…...
ADC(二):外部触发
有关ADC的基础知识请参考标准库入门教程 ADC(二):外部触发 1、TIM1的CC1事件触发ADC1DMA重装载2、TIM3的TRGO事件(的更新事件)触发ADC1DMA重装载3、TIM3的TRGO事件(的捕获事件)触发ADC1DMA重装载4、优化TIM3的TRGO事件(的捕获事件)触发ADC1D…...
数仓开发那些事(8)
程序员圣经 为什么刚刚能运行,现在就不行 为什么刚刚不运行,现在就可以 为什么他的可以跑,我的不能跑 为什么我的可以跑,他的就不行 为什么这台电脑能,那台就不行 为什么这台电脑不行,那台就行 神州员工&a…...
【CSS in Depth 2 精译_096】16.4:CSS 中的三维变换 + 16.5:本章小结
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…...
【连续学习之ResCL算法】2020年AAAI会议论文:Residual continual learning
1 介绍 年份:2020 会议: AAAI Lee J, Joo D, Hong H G, et al. Residual continual learning[C]//Proceedings of the AAAI Conference on Artificial Intelligence. 2020, 34(04): 4553-4560. 本文提出的算法是Residual Continual Learning (ResC…...
【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程
系列文章目录 【zookeeper核心源码解析】第一课:zk启动类核心流程序列图 【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程 【zookeeper核心源码解析】第三课:leader与follower何时开始同步&#…...
数据流图和流程图的区别
在结构化建模中,数据流图和流程图都是非常重要的工具,它们为开发人员提供了强大的手段来分析和设计系统。尽管两者在表面上看起来有些相似,但它们在功能、用途和表达方式上存在显著的区别。本文将详细探讨数据流图和流程图的区别,…...
关于内网服务器依托可上网电脑实现访问互联网
关于内网服务器依托可上网电脑实现访问互联网 背景:在实验室内网的一个服务器,没有配置 NAT ,无法使用外网,只能在局域网内进行访问,但是呢,我们自己的电脑是可以访问互联网的,那么怎么通过让自…...
期权懂|期权入门知识:如何选择期权合约?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 期权入门知识:如何选择期权合约? 一、选择月份: 通常情况下,月份的选择与期货合约的选择类似,主要关注主力合约。主力…...
JavaScript基础课程二、学习JavaScript路线图
JavaScript 全栈学习路线 JavaScript 基础→进阶→高级→跨平台实战 这是一套零基础可入门、循序渐进、覆盖全场景的 JavaScript 学习路线,包含学习重点、实战项目、工具资源和避坑指南,学完可独立开发网页、小程序、APP、桌面软件、后端服务。 一、先搞懂:JavaScript 到…...
别再手动配准点云了!用C++ Eigen库的SVD方法,5分钟搞定刚体变换(附完整代码)
5分钟用Eigen实现点云刚体变换:SVD方法的工程实践指南 在三维视觉和机器人领域,点云配准是基础且关键的任务。想象一下,当你需要将不同视角扫描的点云拼接成一个完整的三维模型,或者让机器人识别物体的位姿时,快速准确…...
Vue3+TS+Vite项目实战:5分钟搞定Mock数据接入(附完整代码)
Vue3TSVite项目实战:5分钟实现动态权限Mock系统 最近在重构后台管理系统时,遇到一个典型痛点:前端页面都开发完了,后端接口还在设计中。这种前后端进度不匹配的情况,相信每个前端开发者都深有体会。今天分享的这套Mock…...
从理论到实践:手把手教你用MATLAB构建LSSVR代理模型
1. 代理模型与LSSVR基础认知 第一次接触"代理模型"这个概念时,我正被一个汽车悬架优化项目折磨得焦头烂额——每次修改参数都要运行长达6小时的有限元仿真。直到导师扔给我一篇关于LSSVR的论文,才真正体会到什么叫"山重水复疑无路&#x…...
告别重复造轮子,用快马ai一键生成rabbitmq多模式高效代码模板
最近在项目中频繁使用RabbitMQ处理消息队列,发现手动编写各种模式的代码既耗时又容易出错。特别是当业务需要切换不同消息模式时,往往要重新查阅文档、调试参数。经过一番摸索,我总结出一套高效使用RabbitMQ的方法,并借助InsCode(…...
如何用AI润色简历?2026年分步指南与实用技巧
在2026年的求职市场中,简历是连接你与心仪岗位的第一座桥梁。面对日益智能化的招聘系统(ATS)和快节奏的筛选流程,仅凭一份通用简历已难以脱颖而出。这时,AI润色简历从一种新兴尝试转变为高效、精准的必备策略。本文旨在…...
医学影像3D可视化的技术革新:MRIcroGL如何重构临床诊断流程
医学影像3D可视化的技术革新:MRIcroGL如何重构临床诊断流程 【免费下载链接】MRIcroGL v1.2 GLSL volume rendering. Able to view NIfTI, DICOM, MGH, MHD, NRRD, AFNI format images. 项目地址: https://gitcode.com/gh_mirrors/mr/MRIcroGL 在医学影像分析…...
Attu可视化工具:向量数据库性能监控与运维效率提升实践
Attu可视化工具:向量数据库性能监控与运维效率提升实践 【免费下载链接】attu The Best GUI for Milvus 项目地址: https://gitcode.com/gh_mirrors/at/attu Attu作为Milvus向量数据库的图形化管理界面,通过系统监控工具、性能分析仪表盘和可视化…...
5大维度解析zteOnu:让ONU设备管理效率提升300%的开源工具
5大维度解析zteOnu:让ONU设备管理效率提升300%的开源工具 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 问题引入:网络运维工程师的日常困境 你是否也曾面临这…...
MAP vs MLE:机器学习参数估计该怎么选?5个真实案例告诉你答案
MAP vs MLE:机器学习参数估计该怎么选?5个真实案例告诉你答案 在机器学习项目的参数估计环节,数据科学家常常面临一个关键选择:采用最大后验概率(MAP)还是最大似然估计(MLE)…...
