RFC規範並沒有指明HTTP協議的GET方法是否不能攜帶body數據,但是對於瀏覽器環境下的XHR和fetch API的規範來說,它們的規範限制了它們不能在GET中攜帶body,而postman或apifox等介面測試工具則由於不遵循這些規範而可以攜帶body。 ...
在與後端對介面的時候,有個GET分頁介面,需要傳pageSize,currentPage等參數,這種不敏感的數據其實直接拼接在url上面就好了,但是後端可能出於開發習慣就把介面的這些參數放在了body上,併在postman或者apifox上測試沒毛病,就讓前端開始對接。前端在對接的過程中發現添加到body中的數據發送失敗。
所以GET請求的body數據是如何被處理的?
RFC規範並沒有說明GET請求不能攜帶body。
而前端(瀏覽器環境)的網路請求,不管用了什麼第三方網路請求庫,最後使用的API無外乎XHR和fetch API。
- 對於XHR,在WHATWG標準中,說明瞭如果請求方法為GET或者HEAD,那麼body會被設置為null。
- 而對於fetch API,在WHATWG標準中,如果設置了body並且請求方法是GET或HEAD,那麼會直接拋出異常。
由於postman和apifox的實現是不遵循WHATWG標準的,所以在這些工具中測試GET請求可以把數據放到body里。
但是對於前端開發(瀏覽器環境)來說,GET請求是不能把數據放到body里的。
根據實際需求,可以考慮把參數拼接到url上,或者如果堅持將數據攜帶在body中,可以考慮使用POST方法。