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

前端往后端传递参数的方式有哪些?

文章目录

      • 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(...);
        }
        
  • 特点
    • 参数是明文的,容易被看到。
    • 适合传递少量的、不敏感的数据,例如过滤条件、排序字段等。
1.2. 路径参数(Path Parameters)
  • 定义
    • 参数直接作为 URL 路径的一部分传递。
  • 示例
    • URL: http://example.com/api/user/123123 是路径参数)
    • 后端获取参数:
      • 在 Java(Spring Boot)中:@PathVariable
        @GetMapping("/api/user/{id}")
        public ResponseEntity<User> getUser(@PathVariable("id") int id) {// 参数 id 会自动解析return ResponseEntity.ok(...);
        }
        
  • 特点
    • 参数以路径的形式传递,直观且便于 RESTful API 的设计。
    • 常用于标识特定资源的参数(如 ID)。

2. 请求体(Request Body)

2.1. JSON 数据
  • 定义
    • 前端通过 JSON 格式的字符串将参数传递到后端,通常用于 POSTPUTPATCH 等请求方法。
  • 示例
    • 请求体内容(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(...);
        }
        
  • 特点
    • 格式灵活,适合传递复杂的数据结构(如对象、数组等)。
    • 是现代前后端分离项目中最常用的方式之一。
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(...);
        }
        
  • 特点
    • 简单易用,但对于复杂的数据结构(如嵌套对象、数组)不适合。
    • 表单数据默认编码为 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)中:@RequestParamMultipartFile
        @PostMapping("/api/upload")
        public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {// 获取文件内容return ResponseEntity.ok("File uploaded successfully!");
        }
        
  • 特点
    • 适合传递文件数据,支持文本、文件混合上传。
    • 表单需要设置 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(...);
        }
        
  • 特点
    • 适合传递与请求相关的元数据,例如认证信息(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(...);
        }
        
  • 特点
    • 参数会自动附带在每次请求中(如果 Cookie 的域和路径匹配)。
    • 常用于存储用户会话信息。
    • 不适合存储敏感数据,需结合 HTTPS 和安全标志(HttpOnlySecure)。

5. WebSocket 或其他协议

  • 前端通过 WebSocket 或其他通信协议传递参数,适用于实时通信场景。
  • 示例:
    • WebSocket 通信:
      socket.send(JSON.stringify({ type: 'message', content: 'Hello' }));
      
    • 后端通过监听解析传递的消息。

总结

前端往后端传递参数的方式选择取决于具体的场景需求:

方式适用场景
URL 查询参数适合传递少量、不敏感的数据,如分页参数、搜索条件等。
URL 路径参数适合 RESTful API,用于标识特定资源(如用户 ID)。
JSON 请求体现代 Web 开发中最常用,适合传递复杂的数据结构。
表单数据简单表单提交,适合传递少量键值对。
文件上传文件和其他表单混合上传。
请求头传递元数据(如认证令牌、客户端信息)。
Cookie用户会话信息和状态保持。

根据实际需求选择合适的方式即可。

相关文章:

前端往后端传递参数的方式有哪些?

文章目录 1. URL 参数1.1. 查询参数&#xff08;Query Parameters)1.2. 路径参数&#xff08;Path Parameters&#xff09; 2. 请求体&#xff08;Request Body&#xff09;2.1. JSON 数据2.2. 表单数据2.3. 文件上传 3. 请求头&#xff08;Headers&#xff09;3.1. 自定义请求…...

Vue axios 异步请求,请求响应拦截器

在 Vue.js 中使用 axios 进行网络请求是非常常见的做法&#xff0c;因为它提供了比原生的 Fetch API 更丰富的功能&#xff0c;并且更易于处理错误和配置。结合 Axios 的拦截器功能&#xff0c;你可以对所有的请求或响应进行预处理&#xff0c;比如添加认证头信息、统一处理错误…...

yarn install 安装报错:Workspaces can only be enabled in private projects.

在本地运行项目的时候&#xff0c;使用yarn install 安装模块依赖的时候&#xff0c;遇到报错&#xff1a;Workspaces can only be enabled in private projects. 一、原因分析 报这个错误是因为你使用了yarn的workspace&#xff0c;但并未将工程标记为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 的区别:解析网络传输协议

引言 在计算机网络的世界中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;和 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是两种极为重要且应用广泛的传输层协议。它们在功能、特性以及适…...

【已解决】pyinstaller打包ico图片报错:OSError: [WinError 225] 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。

起因&#xff1a; pyinstaller加上 --icon 参数打包时报错。 命令如下&#xff1a; 解决&#xff1a; 关闭 Windows 的病毒防护即可&#xff0c;步骤如下。 点屏幕右下角通知栏&#xff0c;进入“病毒和威胁防护”&#xff1a; 打开&#xff1a; 关闭实时保护&#xff08…...

SpringBoot项目配置文件的优先级

从外部讲 内部讲 所以优先级是:外部的config里的application.yml最高 然后是外部与jar包同目录下的application.yml 再到内部的classpath下config下的application.yml 最后到classpath下的application.yml 最后来个优先级最高的 启动时候 指定spring.config.location…...

JS中类型化数组(Typed Arrays)详解和常见应用场景

在JavaScript中&#xff0c;类型化数组&#xff08;Typed Arrays&#xff09; 是用于处理二进制数据的对象。它们允许我们以一种高效的方式操作和存储大量的数值数据&#xff0c;特别适合处理类似于图像、音频、视频等场景的原始二进制数据。 类型化数组的基本概念 类型化数组…...

虚幻引擎是什么?

Unreal Engine&#xff0c;是一款由Epic Games开发的游戏引擎。该引擎主要是为了开发第一人称射击游戏而设计&#xff0c;但现在已经被成功地应用于开发模拟游戏、恐怖游戏、角色扮演游戏等多种不同类型的游戏。虚幻引擎除了被用于开发游戏&#xff0c;现在也用于电影的虚拟制片…...

LabVIEW生物医学信号虚拟实验平台

介绍了一款基于LabVIEW的多功能生物医学信号处理实验平台的设计和实现。平台通过实践活动加强学生对理论的理解和应用能力&#xff0c;特别是在心电图(ECG)和脑电图(EEG)的信号处理方面。实验平台包括信号的滤波、特征提取和频谱分析等功能&#xff0c;能直观体验和掌握生物医学…...

【软件工程】十万字知识点梳理 | 期末复习专用

原创文章,禁止转载。 文章目录 图CRC卡片用例图类图状态图活动图泳道图软件质量因素自顶向下集成自底向上集成人员与工作量之间的关系时序图关键路径软件结构基本路径测试判定表数据流图(DFD)体系结构设计问题数据字典挣值分析等价划分程序流程图PAD | N-S燃尽图甘特图对象模…...

Android --- 在AIDL进程间通信中,为什么使用RemoteCallbackList 代替 ArrayList?

1.RemoteCallbackList vs ArrayList RemoteCallbackList 是一个特殊的 List&#xff0c;它用来管理跨进程的回调&#xff0c;特别是当回调对象是在不同进程中时。它在 AIDL&#xff08;Android Interface Definition Language&#xff09;通信中常常用来处理跨进程的通信。 Arr…...

ADC(二):外部触发

有关ADC的基础知识请参考标准库入门教程 ADC&#xff08;二&#xff09;&#xff1a;外部触发 1、TIM1的CC1事件触发ADC1DMA重装载2、TIM3的TRGO事件(的更新事件)触发ADC1DMA重装载3、TIM3的TRGO事件(的捕获事件)触发ADC1DMA重装载4、优化TIM3的TRGO事件(的捕获事件)触发ADC1D…...

数仓开发那些事(8)

程序员圣经 为什么刚刚能运行&#xff0c;现在就不行 为什么刚刚不运行&#xff0c;现在就可以 为什么他的可以跑&#xff0c;我的不能跑 为什么我的可以跑&#xff0c;他的就不行 为什么这台电脑能&#xff0c;那台就不行 为什么这台电脑不行&#xff0c;那台就行 神州员工&a…...

【CSS in Depth 2 精译_096】16.4:CSS 中的三维变换 + 16.5:本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 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 介绍 年份&#xff1a;2020 会议&#xff1a; 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核心源码解析】第一课&#xff1a;zk启动类核心流程序列图 【zookeeper核心源码解析】第二课&#xff1a;俯瞰QuorumPeer启动核心流程&#xff0c;实现选举关键流程 【zookeeper核心源码解析】第三课&#xff1a;leader与follower何时开始同步&#…...

数据流图和流程图的区别

在结构化建模中&#xff0c;数据流图和流程图都是非常重要的工具&#xff0c;它们为开发人员提供了强大的手段来分析和设计系统。尽管两者在表面上看起来有些相似&#xff0c;但它们在功能、用途和表达方式上存在显著的区别。本文将详细探讨数据流图和流程图的区别&#xff0c;…...

关于内网服务器依托可上网电脑实现访问互联网

关于内网服务器依托可上网电脑实现访问互联网 背景&#xff1a;在实验室内网的一个服务器&#xff0c;没有配置 NAT &#xff0c;无法使用外网&#xff0c;只能在局域网内进行访问&#xff0c;但是呢&#xff0c;我们自己的电脑是可以访问互联网的&#xff0c;那么怎么通过让自…...

期权懂|期权入门知识:如何选择期权合约?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 期权入门知识&#xff1a;如何选择期权合约&#xff1f; 一、选择月份&#xff1a; 通常情况下&#xff0c;月份的选择与期货合约的选择类似&#xff0c;主要关注主力合约。主力…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...