誰說 HTTP GET 就不能經過 Body 來發送數據呢?

當咱們被問及 HTTP 的 GET 與 POST 兩種請求方式的區別的時候,不少答案是說 GET 的數據須經過 URL 以 Query Parameter 來傳送,而 POST 能夠經過請求體來發送數據,因此因 URL 的受限,每每 GET 沒法發送太多的字符。這個回答比如在啓用了 HTTPS 時,GET 請求 URL 中的參數仍然是明文傳輸的同樣。html

GET 果然不能經過 Request Body 來傳送數據嗎?非也。如此想法多半是因循着網頁中 form 的 method 屬性只有 get 與 post 兩種而來。由於把 form 的 method 設置爲 post, 表單數據會放在 body 中,而 method 爲 get(默認值) 時, 提交時瀏覽器會把表單中的字符拼接到 action 的 URL 後做爲 query parameter 傳送。因而乎就有了這麼一種假像:HTTP GET 必須經過 URL 的查詢參數來發送數據。瀏覽器

其實 HTTP 規範並未規定說 GET 就不能發送 body 數據,在 RFC GET 中只是說ide

The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI.post

只是說 GET 意味着經過 URI 來識別資源。測試

我也是本着傳統上對 GET 與 POST 區別的誤解不少年,今天忽然意識到 GET 應該可使用 body, 何況 HTTP 自己是一個純文本的協議。沒有測試就沒有 100% 的發言權,因此作了以下的測試 閱讀全文 >>orm

相關文章
相關標籤/搜索