[HTTP] GET请求的body能否携带数据?
在与后端对接口的时候,有个GET分页接口,需要传pageSize,currentPage等参数,这种不敏感的数据其实直接拼接在url上面就好了,但是后端可能出于开发习惯就把接口的这些参数放在了body上,并在postman或者apifox上测试没毛病,就让前端开始对接。前端在对接的过程中发现添加到body中的数据发送失败。
所以GET请求的body数据是如何被处理的?
RFC规范并没有说明GET请求不能携带body。
而前端(浏览器环境)的网络请求,不管用了什么第三方网络请求库,最后使用的API无外乎XHR和fetch API。
对于XHR,在WHATWG标准中,说明了如果请求方法为GET或者HEAD,那么body会被设置为null。
https://xhr.spec.whatwg.org/#the-send()-method 第3条
而对于fetch API,在WHATWG标准中,如果设置了body并且请求方法是GET或HEAD,那么会直接抛出异常。
https://fetch.spec.whatwg.org/#request-class 第35条
由于postman和apifox的实现是不遵循WHATWG标准的,所以在这些工具中测试GET请求可以把数据放到body里。
但是对于前端开发(浏览器环境)来说,GET请求是不能把数据放到body里的。
根据实际需求,可以考虑把参数拼接到url上,或者如果坚持将数据携带在body中,可以考虑使用POST方法。