首页/文章/http-网络

get请求参数放在body中?

2024-04-17
7243 分钟
...

与后端对接口时,看到有一个get请求的接口,它的参数是放在body中的

******get请求参数可以放在body中??

随即问了后端,后端大哥说在postman上是可以的,还给我看了截图

可我传参怎么也调不通!

下面就来探究到底是怎么回事

项目中使用axios来进行http请求,使用get请求传参的基本姿势:


axios.get(url, {
  params: {}
})

如果想要将参数放在body中,应该怎么做呢?

查看axios的文档并没有看到对应说明,去github上翻看下axios源码看看

lib/core/Axios.js文件中

可以看到像deletegetheadoptions方法,它们只接收两个参数,不过在config中有一个data

熟悉的post请求,它接收的第二个参数data就是放在body的,然后一起作为给this.request作为参数

所以看样子get请求应该可以在第二个参数添加data属性,它会等同于post请求的data参数

顺着源码,再看看lib/adapters/xhr.js,上面的this.request最终会调用这个文件封装的XMLHttpRequest

export default isXHRAdapterSupported && function (config) {
  return new Promise(function dispatchXhrRequest(resolve, reject) {
    let requestData = config.data

    
    request.open(config.method.toUpperCase(), 
                 buildURL(fullPath, config.params, config.paramsSerializer), true);
    
    
    ...

    
    request.send(requestData || null);
  });
}

最终会将data数据发送出去

所以只要我们传递了data数据,其实axios会将其放在body发送出去的

2.1 实战

本地起一个koa服务,弄一个简单的接口,看看后端能否接收到get请求的body参数

router.get('/api/json', async (ctx, next) => {
	console.log('get请求获取body: ', ctx.request.body)
  
	ctx.body = ctx.request.body
})

router.post('/api/json', async (ctx, next) => {
	console.log('post请求获取body: ', ctx.request.body)

	ctx.body = ctx.request.body
})

为了更好地比较,分别弄了一个getpost接口

前端调用接口:

const res = await axios.get('/api/json', {
  data: {
    id: 1,
    type: 'GET'
  }
})


const res = await axios.post('/api/json', {
  data: {
    id: 2,
    type: 'POST'
  }
})
console.log('res--> ', res)

axiossend处打一个断点

可以看到数据已经被放到body中了

后端已经接收到请求了,但是get请求无法获取到body

结论:

  • 前端可以发送带body参数的get请求,但是后端接收不到
  • 这就是接口一直调不通的原因

我们查看WHATGW标准,在XMLHttpRequest中有这么一个说明:

大概意思:如果请求方法是GETHEAD ,那么body会被忽略的

所以我们虽然传递了,但是会被浏览器给忽略掉

这也是为什么使用postman可以正常请求,但是前端调不通的原因了

因为postman并没有遵循WHATWG的标准,body参数没有被忽略

3.1 fetch是否可以?

fetch.spec.whatwg.org/#request-cl…

答案:也不可以,fetch会直接报错

  1. 结论:浏览器并不支持get请求将参数放在body
  2. XMLHTTPRequest会忽略body参数,而fetch则会直接报错

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
http-网络2025-10-27
frp-内网穿透详解
1\. 简介与工作原理 frp(Fast Reverse Proxy)是一个高性能的反向代理 / 内网穿透工具。典型部署模式: 在 公网 VPS 上运行 (服务端),监听来自 的 出站持久连接 (控制端口,通常 7000)。 在 内网机器 上运行 (客户端),与 frps 建立长连接并注册若干映射(如 tcp/http)。 当外部请求到达 frps(公网),frps 根据路由规则把流量转发回对应的 frpc 连接,再由 frpc 转发到...
学习
http-网络2025-10-13
内网穿透介绍
  1\. 简要概念与为什么需要内网穿透 大多数家庭/公司网络在私有网(RFC1918)后面,通过 NAT 共享一个公网 IP。NAT 允许内网对外发起连接,但阻止公网主动连入。 内网穿透 就是建立从公网到内网的可达通道,常用于:Webhook 回调、远程演示、远程管理、IoT 设备接入、远程调试等。 2\. 核心原理(三行总结) 反向连接 :内网主动连到公网穿透服务器,建立一条"回路"。 中继/代理 :穿透服务器把外部流量中...
学习
http-网络2025-08-06
按下回车后网页是怎么出来的
当你在浏览器中输入一个网址,比如 ,然后按下回车键,几秒钟后页面就完整地呈现在你眼前。这个看似简单的操作,背后其实是一整套精密协作的网络机制在起作用。本文将带你从基础讲起,理解 Web 开发中最重要的网络知识,帮助你搞清楚: 数据是如何从服务器传到你的电脑,并最终变成网页的? 一、互联网通信的分层模型:OSI 七层模型 为了管理复杂的网络通信,工程师们提出了一个通用的参考模型—— OSI 七层模型 。它把整个通信过程划分为七个层次,每一...
学习面试
http-网络2025-06-20
MQTT与HTTP在物联网中的比较:为什么MQTT是更好的选择
简介: 通过上述分析,可以看出MQTT在物联网应用中的确是更好的选择。其高效的通信模型、低带宽消耗、稳定的连接保持机制以及可靠的消息质量保证,使其在各种物联网场景中都能表现出色。开发者在设计和实现物联网系统时,应优先考虑采用MQTT协议,以充分发挥其在资源受限环境下的优势,提升系统的整体性能和可靠性。 【杂谈】 MQTT与HTTP在物联网中的比较:为什么MQTT是更好的选择 在物联网(IoT)应用中,选择合适的通信协议是实现高效、可靠数...
学习
http-网络2025-03-04
网络代理详解
一、 的基础概念 1\. 什么是代理? 代理是一种通过中间服务器来帮助 访问目标服务器的技术。代理服务器位于客户端与服务器之间,充当两者的中介,从而实现客户端和服务器之间的隔离。用户的所有请求经过代理后,再发往目标服务器,而目标服务器的响应则返回代理,再由代理传递给用户。 2\. 网络代理的工作流程 在基本的网络代理工作流程中, 扮演了“请求转发者”和“响应返回者”的角色: 1. 客户端请求 :客户端将请求发送到代理服务器,而不是直接发...
学习面试
http-网络2024-11-29
没有koa的cors你怎么处理跨域?
关联问题: JSONP有何局限性 CORS如何处理复杂请求 代理在生产环境效果如何 前言 “金九银十”的秋招,就像是落进池塘的羽毛,连点水花都没砸起来。已读不回是常态,能给面试已是情分,能拿offer的更是少之又少。可怜我在寒潮来临的深秋之际,也只得哀叹一句“越来越冷了啊...” 不过人总是要吃饭的,所以再怎么冷,卖炭翁也得卖炭,牛马攻城狮也得“攻城”,既是为了填饱肚子,也是为了“春天”做准备。所以今天为各位前端工程狮细聊一下前端面试中...
学习面试

评论

请登录后发表评论

去登录
加载评论中...

目录