最近看Elasticsearch: The Definitive Guide这本书的时候,有些时候发现使用curl的时候,在GET请求中加了-d参数,因为很少见到GET请求在请求体中带参数,一般情况下都是在URL里面的,所以好奇特地用wireshark抓了一下包,使用的命令是curl -XGET "http://120.25.162.238:9200/_search?pretty" -d '{"from":5,"size":5}'
,返回的结果一切正常,抓包结果如图所示:
可以看到GET请求的URL是/_search?pretty
,URL中并没有想像中的参数,参数是在图片最下方所示的部分中。由此观之,HTTP GET请求实际上也是能在请求体中带参数的,只不过有些服务器(尤其是缓存代理服务器)可能不支持这种方式而已。而ES的设计者认为GET比较符合检索信息的这个动作,比POST要好,所以使用了GET请求,不过为了与习惯保持一致,而且为了兼容所有的服务器,所以把GET换成POST也是可以的。