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