将请求正文与GET请求一起传递是否违反REST风格?
例如在Elasticsearch中过滤一些信息
curl localhost:9200/megacorp/employee/_search -d '{"query" : {"filtered" : {"filter" : {"range" : {"age" : { "gt" : 30 }}},"query" : {"match" : {"last_name" : "smith"}}}}}'
甚至设计了一些工具来避免GET请求中的请求主体(例如邮递员)
从RFC:
GET请求消息中的有效负载没有定义的语义。在GET请求上发送有效内容正文可能会导致某些现有实现拒绝该请求。
换句话说,这不是禁止的,但是它是未定义的行为,应避免使用。HTTP客户端,服务器和代理可以随意删除主体,这不会违反标准。这绝对是一个坏习惯。
HTTPBis工作组(负责HTTP和相关标准的工作组)的进一步案文:
最后,请注意,尽管HTTP允许GET请求在语法上具有主体,但这样做仅是为了使解析器具有通用性。根据RFC7231第4.3.1节的规定,GET上的主体没有任何意义,并且将被通用HTTP软件忽略或拒绝。
资源