在客戶機(jī)和服務(wù)器之間進(jìn)行請(qǐng)求-響應(yīng)時(shí),兩種最常被用到的方法是:GET 和 POST。
- GET - 從指定的資源請(qǐng)求數(shù)據(jù)。
- POST - 向指定的資源提交要被處理的數(shù)據(jù)
Get方法
查詢字符串(名稱/值對(duì))是在 GET 請(qǐng)求的 URL 中發(fā)送的:
/test/demo.js?name="Tom"&password='123456'
Post方法
查詢字符串(名稱/值對(duì))是在 POST 請(qǐng)求的 HTTP 消息主體中發(fā)送的:
POST /test/demo.js HTTP/1.1
Host: localhost:3000
name="Tom"&password="123456"
區(qū)別
1.最直觀的就是語(yǔ)義上的區(qū)別:
- get用于獲取數(shù)據(jù),post用于提交數(shù)據(jù)。
2.get和post的長(zhǎng)度的限制:
- get是通過url提交數(shù)據(jù),因此get可提交的數(shù)據(jù)量就跟url所能達(dá)到的最大長(zhǎng)度有直接關(guān)系。
- 實(shí)際上HTTP協(xié)議對(duì)url長(zhǎng)度是沒有限制的;限制url長(zhǎng)度大多數(shù)是瀏覽器或者服務(wù)器的配置參數(shù)
- 同樣的,HTTP協(xié)議沒有對(duì)POST進(jìn)行任何限制,一般是受服務(wù)器配置限制或者內(nèi)存大小限制。
3.get和post的安全性:
- GET是通過URL方式請(qǐng)求,可以直接看到,明文傳輸。
- POST是通過請(qǐng)求header請(qǐng)求,可以通過開發(fā)者工具或者抓包看到,同樣也是明文的。
- GET請(qǐng)求會(huì)保存在瀏覽器歷史紀(jì)錄中,還可能會(huì)保存在Web的日志中。
4.get冪等,post不冪等:
冪等是指同一個(gè)請(qǐng)求方法執(zhí)行多次和僅執(zhí)行一次的效果完全相同。
引入冪等主要是為了處理同一個(gè)請(qǐng)求重復(fù)發(fā)送的情況,比如在請(qǐng)求響應(yīng)前失去連接,如果方法是冪等的,就可以放心地重發(fā)一次請(qǐng)求。這也是瀏覽器在后退/刷新時(shí)遇到POST會(huì)給用戶提示的原因:POST語(yǔ)義不是冪等的,重復(fù)請(qǐng)求可能會(huì)帶來(lái)意想不到的后果。