平时用手机点外卖、查快递,背后都是通过HTTP请求把信息传给服务器。比如你选了多个菜品下单,或者勾选了几个快递单号一起查询,这些“多个”数据是怎么传过去的?是不是直接传个数组就行了?
HTTP本身不认“数组”这种类型
HTTP协议本身只认字符串形式的键值对,比如 name=小明&age=25。它没有内置“数组”这个概念。但实际开发中,确实需要传多个值,比如 选中的商品ID:1001,1002,1003。这时候就得靠“约定俗成”的方式来表达数组。
常见的传数组方法
虽然HTTP不直接支持数组,但可以通过几种常见方式模拟:
1. 多个同名参数
在GET或POST请求中,重复使用同一个参数名:
GET /api/cart?item=1001&item=1002&item=1003
后端收到后,会自动把同名的 item 解析成数组,比如PHP里 $_GET['item'] 就是 [1001,1002,1003],Node.js的Koa、Express配合合适中间件也能处理。
2. 用逗号分隔
把多个值拼成一个字符串,用逗号或其他符号隔开:
GET /api/order?ids=1001,1002,1003
后端拿到 ids 后,用 split(',') 拆开就行。这种方式简单直接,但要注意别让用户输入的内容里自带逗号,否则会拆错。
3. 使用方括号语法(常用于表单)
有些框架喜欢用中括号表示数组,比如:
POST /api/submit
Content-Type: application/x-www-form-urlencoded
users[0]=张三&users[1]=李四&users[2]=王五
或者更简单的:
users[]=张三&users[]=李四&users[]=王五
这样后端框架(如Laravel、Rails)会自动识别为数组。
JSON请求体里的数组更直接
现在多数接口用的是POST + JSON格式。这时候传数组就非常自然了:
{
"items": [1001, 1002, 1003],
"tags": ["新品", "促销"]
}
只要内容类型是 application/json,服务器解析JSON后,数组结构原样保留,不需要额外处理。
注意安全和兼容性
传数组看着简单,但也可能出问题。比如有人故意提交超长列表,导致服务器内存暴涨;或者不同框架对 [] 的处理不一致,前端传了,后端却没解析成数组。上线前得测清楚。
还有,如果是在URL里传大量数据,比如几十个ID拼在一起,URL太长可能被浏览器或代理截断。这时候还是走POST + JSON更稳妥。