当前位置: 首页 > 知识库问答 >
问题:

java - get请求参数放body里,post请求参数放url上这种是否合理?

蒋何平
2024-03-31

get请求参数放body里,post请求参数放url上这种是否合理?

有时候参数很少的情况我会让前端把参数放到post的url上,因为我感觉比如有两个参数,我后端要新建一个bean用@RequestBody接收完全没必要

我的想法是:如果get请求的参数可能比较复杂比如有bean的嵌套或者长度比较大超过了容器的限制(不考虑产品涉及是否合理),就可以放在body中,否则就放在url上;如果post请求参数比较简单(比如两个参数),我就放在url上不想在新建一个bean了(感觉麻烦),如果参数比较多或者比较复杂就放在body中。
我的这种想法合理吗?

共有3个答案

蒋骏
2024-03-31

get请求在浏览器上不可以携带body,这个是浏览器的限制。至于是否合理,编码上的复杂是可以自定义一些框架设置来简化的,比如自定义参数解析器等,不应该为了编码麻烦不去做你认为合理的事情(能力范围内尽力)

尉迟哲瀚
2024-03-31

技术上讲是可以的,但是不建议: https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET

虽然HTTP规范(RFC 7231)并未规定GET请求不可以携带Body,但是后续的规范逐步建议应该明确这种行为,给予警告甚至拒绝。

曾经ElasticSearch的RESTAPI采用GET请求携带Body请求的接口格式和规范,但在目前版本中已经彻底废弃

一篇不错的介绍文章可以参见: https://www.baeldung.com/cs/http-get-with-body

如果你用第三方类库,可能已经开始拒绝GET请求携带Body了,所以更不建议你这么去做

谈阎宝
2024-03-31

你的这种想法并不合理。HTTP协议对GET和POST请求的参数放置位置有明确的规定:

  1. GET请求:参数通常放在URL的查询字符串(Query String)中。这是因为GET请求通常用于获取(或查询)数据,参数作为查询条件放在URL中更直观,也更容易被缓存和书签保存。此外,大多数Web服务器和浏览器对URL的长度有限制,因此如果参数过于复杂或长度过大,可能会导致问题。
  2. POST请求:参数通常放在请求体(Request Body)中。这是因为POST请求通常用于提交(或更改)数据,将参数放在请求体中可以更好地处理复杂的数据结构,如JSON、XML等。此外,POST请求的请求体大小通常比URL的长度限制要大得多,因此更适合传输大量或复杂的数据。

将GET请求的参数放在请求体中,或者将POST请求的参数放在URL中,都不符合HTTP协议的设计原则,也可能会导致一些问题,如浏览器兼容性问题、URL长度限制问题、缓存和书签保存问题等。

因此,建议按照HTTP协议的规定,将GET请求的参数放在URL的查询字符串中,将POST请求的参数放在请求体中。同时,为了处理复杂的数据结构,可以考虑使用JSON、XML等格式来传输数据。

 类似资料:
  • 今天调用了一个接口,接口要求传一个日期过去,当时没仔细看(因为文档也没写请求参数和相应参数),以为是传一个data,里面有条件查询的参数之类的,结果第一次报错。 Required request parameter 'date' for method parameter type String is not present(方法参数类型字符串所需的请求参数“日期”不存在) 后面第二次调用的时候注意

  • 将jwt(json web令牌)作为GET请求的查询参数放入url是否安全?

  • 我需要执行修改后的请求,但我有一个问题,我不能很好地理解。在尝试使用代码之前,我用Postman和request测试了api调用,如下所示: 下面是我的android代码: 编辑请求: null

  • 我试图做一个POST请求,但我不能让它工作: 我基本上想复制这个超文本传输协议请求(不是ajax),就像它是由html表单发起的一样: URL:/api 参数:用户名和密码

  • 问题内容: 我需要构建一个GWT应用程序,该应用程序将由具有特定URL参数的外部应用程序调用。 例如: http://www.somehost.com/com.app.client.Order.html?orderId=99999。 如何在GWT应用程序中捕获orderId参数? 问题答案: 尝试, PS GWT可以调用本机javascript,这意味着如果javascript可以完成任务,那么G

  • 问题内容: 在swift 3中建议使用带参数的GET的哪种方法? 范例: 提前致谢 ! 问题答案: 示例如何使用请求。