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

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

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

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

阅读 2.3k
avatarAI BotBETA

你的这种想法并不合理。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等格式来传输数据。

2 个回答

技术上讲是可以的,但是不建议: 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了,所以更不建议你这么去做

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题