记录--get请求参数放在body中?

这篇具有很好参考价值的文章主要介绍了记录--get请求参数放在body中?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--get请求参数放在body中?

 

1、背景

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

记录--get请求参数放在body中?

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

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

记录--get请求参数放在body中?

 

可我传参怎么也调不通!

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

2、能否发送带有body参数的get请求

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

// 参数拼接在url上
axios.get(url, {
  params: {}
})

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

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

lib/core/Axios.js文件中

记录--get请求参数放在body中?

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

记录--get请求参数放在body中?

熟悉的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

    // 将config.params拼接在url上
    request.open(config.method.toUpperCase(), 
                 buildURL(fullPath, config.params, config.paramsSerializer), true);
    
    // 省略若干代码
    ...

    // Send the request
    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处打一个断点

记录--get请求参数放在body中?

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

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

记录--get请求参数放在body中?

结论:

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

3、这是为何呢?

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

记录--get请求参数放在body中?

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

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

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

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

记录--get请求参数放在body中?

3.1 fetch是否可以?

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

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

记录--get请求参数放在body中?

总结

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

本文转载于:

https://juejin.cn/post/7283367128195055651

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--get请求参数放在body中?文章来源地址https://www.toymoban.com/news/detail-760197.html

到了这里,关于记录--get请求参数放在body中?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • http请求和响应格式说明,http的get和post请求方式说明,http的请求体body的几种数据格式

    一个HTTP请求报文由 请求行(request line)、请求头部(header)、空行和请求数据 4个部分组成, 请求报文的一般格式 1、第一行必须是一个请求行(request-line),用来说明请求类型,要访问的资源以及所使用的HTTP版本 2、紧接着是一个请求头(header),用来说明服务器要使用的附加信息

    2024年02月02日
    浏览(45)
  • Postman 请求参数传递指南:Query、Path 和 Body 详解

    Postman 是一个非常流行的 API 开发环境,它允许开发者测试、开发和文档化他们的 API。在 Postman 中,当你发送一个请求时,你可能需要将参数传递给服务器。这些参数可以通过不同的方式传递,例如 Query Parameters(查询参数)、Path Variables(路径变量)和 Body(请求体)。下面

    2024年04月23日
    浏览(34)
  • 使用 Postman 传递请求参数:Query、Path 和 Body 教程

    Postman  作为一个功能强大的工具,极大地简化了 API 测试和调试的过程,提供了发送请求和检查响应的直接方法。本文将着重介绍如何在 Postman 中高效地处理请求参数,以提高 API 测试和开发的便利性。 首先,我们需要明白什么是请求参数。简单来说,请求参数是传递给服务

    2024年04月23日
    浏览(28)
  • 糊涂工具类(hutool)post请求设置body参数为json数据

    大家好,我是雄雄,欢迎关注微信公众号 雄雄的小课堂 今天介绍一个案例,糊涂工具类(hutool)post请求设置body参数为json数据,刚开始写的总是报错,下面是正确的代码: 重点是下面的这行代码:

    2024年02月16日
    浏览(37)
  • SpringCloud Gateway 网关请求中body、query、header参数的获取和修改

          最近在开发中要改造一个普通SpringBoot接口服务为SpringCloud Gateway网关服务,并且需要在网关做验签,由于我们这个服务需要对外几个第三方平台提供接口,每家请求的传参形式都不同,有将签名信息放请求头、也有将签名信息放query参数、还有直接放body中的,请求头

    2024年01月23日
    浏览(50)
  • vue使用axios发送post请求携带json body参数,后端使用@RequestBody进行接收

    最近在做自己项目中,做一个非常简单的新增用户场景,但是使用原生axios发送post请求的时候,还是踩了不少坑的。 唉,说多了都是泪,小小一个新增业务,在自己前后端一起开发的时候,硬是搞了好久。 下面就把问题总结分享下,防止后人再踩坑。 首先先看下我的接口定

    2024年02月02日
    浏览(40)
  • tp6框架中Http类 请求的header、body参数传参 及post、file格式

    引入Http类: 在需要使用的地方引入Http类: use thinkfacadeHttp; GET请求示例: $response = Http::get(\\\'https://example.com/api/resource\\\');  设置Header参数: $headers = [ \\\'Authorization\\\' = \\\'Bearer YourAccessToken\\\', \\\'Content-Type\\\' = \\\'application/json\\\', ]; $response = Http::header($headers)-get(\\\'https://example.com/api/resource\\\'); POST请

    2024年01月19日
    浏览(37)
  • 电子取证之服务器取证,本人第一次从pc取证到服务器,这里有一套例题分享给大家,所有解析我都尽可能全面具体,希望与各位同仁一起学习。(二次修改)

    话不多说,先上链接,这个包含一个2G的服务器镜像和题目,原题是弘连公司的,致谢,此处纯粹分享解法供大家学习。 第二次做题目,发现宝塔新版已经不支持,所以题目意义减少,还是欢迎手搓与小白来看看 链接: https://pan.baidu.com/s/1p8T7Fez_VlnSqdzvptARRw?pwd=ybww 提取码: ybww

    2024年02月07日
    浏览(41)
  • Http中post/get请求参数接收

    Http请求报文示例图如下:   ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST,Spring 3.0提供了一个HiddenHttpMethodFilter,允许通过_method的表单参数指定这些特殊的HTTP方法(实际上还是通过POST提

    2024年01月25日
    浏览(62)
  • 前端使用GET请求时,参数或数据丢失

    公司项目上的某个订单请求时报错了,排查了一下是参数没有传过去 最后发现参数没有传过去是因为请求参数中有一个参数的value值是有问题的,而使用get请求时,参数会拼接在url上。 有问题的参数是collection_address的value值有一个#号,这就是问题所在 当我发起get请求时,我

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包