什么是 HTTP?
超文本傳輸協(xié)議(HTTP)的設(shè)計目的是保證客戶機與服務(wù)器之間的通信。
HTTP 的工作方式是客戶機與服務(wù)器之間的請求-應(yīng)答協(xié)議。
在客戶機和服務(wù)器之間進行請求-響應(yīng)時,兩種最常被用到的方法是:GET 和 POST。
GET - 從指定的資源請求數(shù)據(jù)。
POST - 向指定的資源提交要被處理的數(shù)據(jù)
GET 方法
查詢字符串(名稱/值對)是在 GET 請求的 URL 中發(fā)送的
/test/demo_form.asp?name1=value1&name2=value2
有關(guān) GET 請求的其他一些注釋:
- GET 請求可被緩存
- GET 請求保留在瀏覽器歷史記錄中
- GET 請求可被收藏為書簽
- GET 請求不應(yīng)在處理敏感數(shù)據(jù)時使用
- GET 請求有長度限制
- GET 請求只應(yīng)當(dāng)用于取回數(shù)據(jù)
POST方法
查詢字符串(名稱/值對)是在 POST 請求的 HTTP 消息主體中發(fā)送的:
POST /test/demo_form.asp HTTP/1.1
Host: bpup.com
name1=value1&name2=value2
有關(guān) POST 請求的其他一些注釋:
- POST 請求不會被緩存
- POST 請求不會保留在瀏覽器歷史記錄中
- POST 不能被收藏為書簽
- POST 請求對數(shù)據(jù)長度沒有要求
安全
如果一個方法的語義在本質(zhì)上是「只讀」的,那么這個方法就是安全的。客戶端向服務(wù)端的資源發(fā)起的請求如果使用了是安全的方法,就不應(yīng)該引起服務(wù)端任何的狀態(tài)變化,因此也是無害的。 此RFC定義,GET, HEAD, OPTIONS 和 TRACE 這幾個方法是安全的。
冪等
冪等的概念是指同一個請求方法執(zhí)行多次和僅執(zhí)行一次的效果完全相同,引入冪等主要是為了處理同一個請求重復(fù)發(fā)送的情況,比如在請求響應(yīng)前失去連接,如果方法是冪等的,就可以放心地重發(fā)一次請求。這也是瀏覽器在后退/刷新時遇到POST會給用戶提示的原因:POST語義不是冪等的,重復(fù)請求可能會帶來意想不到的后果。
可緩存性
顧名思義就是一個方法是否可以被緩存,此RFC里GET,HEAD和某些情況下的POST都是可緩存的,但是絕大多數(shù)的瀏覽器的實現(xiàn)里僅僅支持GET和HEAD。
GET的語義是請求獲取指定的資源。GET方法是安全、冪等、可緩存的(除非有 Cache-ControlHeader的約束),GET方法的報文主體沒有任何語義。
POST的語義是根據(jù)請求負(fù)荷(報文主體)對指定的資源做出處理,具體的處理方式視資源類型而不同。POST不安全,不冪等,(大部分實現(xiàn))不可緩存。
GET 相對 POST 的優(yōu)勢是什么
最大的優(yōu)勢是, GET 的URL可以人肉手輸啊。你在地址欄打個POST給我看看。本質(zhì)上面, GET 的所有信息都在URL, 所以很方便的記錄下來重復(fù)使用。所以如果你希望- 請求中的URL可以被手動輸入- 請求中的URL可以被存在書簽里,或者歷史里,或者快速撥號里面,或者分享給別人。- 請求中的URL是可以被搜索引擎收錄的。- 帶云壓縮的瀏覽器,比如Opera mini/Turbo 2, 只有GET才能在服務(wù)器端被預(yù)取的。- 請求中的URL可以被緩存。