java get post 区别详解_[Java教程]GET 与 POST 其实没有什么区别
[Java教程]GET 與 POST 其實(shí)沒有什么區(qū)別
0 2020-12-30 11:36:20
GET 與 POST 其實(shí)沒有什么區(qū)別
本文寫于 2020 年 12 月 30 日
GET 與 POST 是兩種 HTTP 方法,并且是最常用的兩種。
今天在使用 Postman 測試 api 的時候,突發(fā)奇想:在 Get 請求的請求體中寫 Body 參數(shù),在 Post 請求中寫 Query 參數(shù)。
居然完全可以運(yùn)行!
對比起我之前看過的一些文章,所謂的 GET 與 POST 的區(qū)別,可以說:網(wǎng)上大部分對二者的分析都是錯的,GET 和 POST 沒有本質(zhì)的區(qū)別。
GET 的 HTTP 報(bào)文完全是這樣的:GET /cats?id=1 HTTP/1.1Host: localhost:3000Content-Type: application/jsonContent-Length: 15{ "id": 1}
GET 也可以是這樣的:POST /cats?id=1 HTTP/1.1Host: localhost:3000Content-Type: application/jsonContent-Length: 15{ "id": 1}
發(fā)現(xiàn)除了開頭的方法不同,別的完全是一模一樣的!
如果我們想要知道他們之間的區(qū)別,首先我們得明確:什么是 HTTP?什么是 HTTP 方法?
什么是 HTTP
什么是 HTTP 呢?
HTTP 是一種協(xié)議,他的設(shè)計(jì)目的是保證客戶端與服務(wù)器之間的通信。
HTTP 的工作方式是客戶端與服務(wù)器之間的「請求」與「應(yīng)答」。(這個客戶端可能是 web 瀏覽器,也可能是需要聯(lián)網(wǎng)的本地應(yīng)用程序)
但是這個「請求」與「應(yīng)答」不能瞎來啊,我們互相之間得看得懂才行——這就是協(xié)議的作用:規(guī)定好應(yīng)該如何請求、應(yīng)該如何響應(yīng)。
關(guān)于 HTTP 不多做解釋,可以看之前一的一篇用簡單 Node.js 后臺程序看 HTTP 請求。
HTTP 方法
而 HTTP 方法呢,顧名思義,就是指在客戶端和服務(wù)器之間進(jìn)行「請求-響應(yīng)」時,被用到的方法。
GET 和 POST 各用一句話來描述:GET 從指定的資源請求數(shù)據(jù)
POST 向指定的資源提交要被處理的數(shù)據(jù)
常見錯誤答案
常常會有人分析 GET 與 POST 的區(qū)別,這里說一下幾個廣為流傳的“錯誤答案”,甚至有些 W3C 也是這么寫的。
GET 的長度有限制,POST 沒有
GET 方法的長度限制是怎么回事?真的有限制嗎?
有限制的其實(shí)是 URL,如果你愿意把參數(shù)寫到 GET 請求的 Body 里去,那 GET 請求的長度和 POST 就是一樣的了。
并且即使是 URL 的長度限制,那也不是 HTTP 協(xié)議的鍋。HTTP 協(xié)議沒有 Body 和 URL 的長度限制,對 URL 限制的大多是瀏覽器和服務(wù)器的原因。
瀏覽器原因就不說了,服務(wù)器是因?yàn)樘幚黹L URL 要消耗比較多的資源,為了性能和安全(防止惡意構(gòu)造長 URL 來攻擊)考慮,會給 URL 長度加限制。
并且 POST 也不是沒有限制的,只是比較大而已。通常 GET 請求中的 Query 參數(shù)大小是以 k 為單位記錄的,根據(jù)不同的瀏覽器和服務(wù)器有不同的數(shù)據(jù);
POST 請求的大小是以 M 為單位記錄的,同樣取決于服務(wù)器。
POST 方法比 GET 方法安全
按照網(wǎng)上大部分文章的解釋,POST 比 GET 安全,因?yàn)閿?shù)據(jù)在地址欄上不可見。
然而,從傳輸?shù)慕嵌葋碚f,他們都是不安全的!!!
因?yàn)?HTTP 在網(wǎng)絡(luò)上是明文傳輸?shù)?#xff0c;只要在網(wǎng)絡(luò)節(jié)點(diǎn)上抓包,就能完整地獲取數(shù)據(jù)報(bào)文。
要想安全傳輸,就只有加密,也就是 HTTPS。
GET 的參數(shù)是固定寫法
我們必須把 GET 的參數(shù)寫在 ? 后面,用 & 分割嗎?
根本不用。
因?yàn)榻馕鰣?bào)文的過程是通過獲取 TCP 數(shù)據(jù),用正則等工具從數(shù)據(jù)中獲取 Header 和 Body,從而提取參數(shù)。
也就是說,我們可以自己約定參數(shù)的寫法,只要服務(wù)端能夠解釋出來就行,一種比較流行的寫法是 HTTP 方法:GET 對比 POST
99%的人都理解錯了 HTTP 中 GET 與 POST 的區(qū)別
都 2019 年了,還問 GET 和 POST 的區(qū)別
(完)
本文網(wǎng)址:http://www.shaoqun.com/a/504449.html
*特別聲明:以上內(nèi)容來自于網(wǎng)絡(luò)收集,著作權(quán)屬原作者所有,如有侵權(quán),請聯(lián)系我們:admin@shaoqun.com。
網(wǎng)絡(luò)
0
總結(jié)
以上是生活随笔為你收集整理的java get post 区别详解_[Java教程]GET 与 POST 其实没有什么区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 车子有贷款可以过户吗
- 下一篇: java数据库初始化参数,oracle数