8 HTTP 的請求方法
目錄
HTTP報(bào)文是由 header+body 組成,請求頭里有請求方法和請求目標(biāo),響應(yīng)頭里有狀態(tài)碼和原因短語,本節(jié)學(xué)習(xí)的是請求頭里的請求方法。
標(biāo)準(zhǔn)請求方法
- 請求方法的實(shí)際含義:客戶端發(fā)送一個(gè)“動作指令”,要求服務(wù)器對URI定位的資源執(zhí)行這個(gè)動作。
- 目前 HTTP/1.1 規(guī)定了八種方法,單詞必須是大寫形式。
![]()
- 請求方法只是客戶端的指令,客戶端沒有決定權(quán),服務(wù)端掌控所有資源,才有絕對的決策權(quán)力。
舉例:客戶端發(fā)起一個(gè) GET 請求,想獲取 “/orders” 這個(gè)文件,但是文件級別較高,那么服務(wù)器可以有如下幾種響應(yīng)方式:- 假裝文件不存在,直接返回 404 Not found 報(bào)文;
- 稍微友好一點(diǎn),明確告訴你有這個(gè)文件,但是不允許訪問,返回一個(gè) 403 Forbidden;
- 再寬松一些,返回 405 Method Not Allowed,然后用 Allow 頭告訴你可以用 HEAD 方法獲取文件的元信息。
GET/HEAD
GET 方法
- 從 0.9 版出現(xiàn)一直保留至今。
- 含義是:請求從服務(wù)器獲取資源,這個(gè)資源即可以是靜態(tài)的文本,頁面,圖片,視頻,也可以是由PHP、Java 動態(tài)生成的頁面或者其他格式的數(shù)據(jù)。
- GET 方法可以搭配其他字段實(shí)現(xiàn)對資源更精細(xì)的操作:
- URI 后使用 # ,在獲取頁面后直接定位到某個(gè)標(biāo)簽所在的位置
- 使用 If-Modified-Since 字段,編程有條件的請求,僅當(dāng)資源被修改時(shí)才會執(zhí)行獲取動作
- 使用 Range 字段就是“范圍請求”,只獲取資源的一部分?jǐn)?shù)據(jù)
HEAD方法
- 請求從服務(wù)器獲取資源,但是只傳回響應(yīng)頭,即資源的“元信息”。
- HEAD 方法可以看作GET方法的一個(gè)簡化版或輕量版,用在并不需要資源的場合,避免傳輸body數(shù)據(jù)的浪費(fèi)。
POST/PUT
POST/PUT向 URI 指定的資源提交數(shù)據(jù),數(shù)據(jù)就放在報(bào)文的body里
POST
- 使用頻率高,應(yīng)用場景多,只要向服務(wù)器發(fā)送數(shù)據(jù),大多數(shù)都是POST。
- POST表示 “新建”“create”含義
PUT
- 使用頻率低,和 POST 語義類似。
- PUT 表示 “修改”“update”含義。
非常用方法
應(yīng)用的不是很多
DELETE 方法
- 指示服務(wù)器刪除資源,因?yàn)檫@個(gè)動作危險(xiǎn)性太大,所以通常服務(wù)器不會執(zhí)行真正的刪除操作,而是對資源做一個(gè)刪除標(biāo)記。
- 更多的時(shí)候服務(wù)器就直接不處理 DELETE 請求。
CONNECT 方法
- 是一個(gè)比較特殊的方法,要求服務(wù)器為客戶端和另一臺遠(yuǎn)程服務(wù)器建立一條特殊的連接隧道,這時(shí) Web 服務(wù)器在中間充當(dāng)了代理的角色。
OPTIONS 方法
- 要求服務(wù)器列出可對資源實(shí)行的操作方法,在響應(yīng)頭的 Allow 字段里返回。
- 它的功能很有限,用處也不大,有的服務(wù)器(例如 Nginx)干脆就沒有實(shí)現(xiàn)對它的支持。
TRACE 方法
- 多用于對 HTTP 鏈路的測試或診斷,可以顯示出請求 - 響應(yīng)的傳輸路徑。
- 它的本意是好的,但存在漏洞,會泄漏網(wǎng)站的信息,所以 Web 服務(wù)器通常也是禁止使用。
拓展方法
比如用 LOCK 方法鎖定資源暫時(shí)不允許修改,或者使用 PATCH 方法給資源打個(gè)小補(bǔ)丁,部分更新數(shù)據(jù)。
但因?yàn)檫@些方法是非標(biāo)準(zhǔn)的,所以需要為客戶端和服務(wù)器編寫額外的代碼才能添加支持。
安全和冪等
安全
在HTTP 協(xié)議里,安全是指 請求方法不會破壞服務(wù)器上的資源,即不會對服務(wù)器上的資源造成實(shí)質(zhì)的修改。
GET、HEAD 方法是“安全”的,因?yàn)樗鼈兪恰爸蛔x”操作,只要服務(wù)器不故意曲解請求方法的處理方式,無論GET和HEAD操作多少次,服務(wù)器上的數(shù)據(jù)都是“安全”的。
POST、PUT、DELETE 方法會修改服務(wù)器上的資源,增加或刪除數(shù)據(jù),所以是“不安全”的。
冪等
冪等是數(shù)學(xué)的用語,被借用到 HTTP 協(xié)議里,意思是多次執(zhí)行相同的操作,結(jié)果也是相同的。
- GET、HEAD 是冪等的。
- DELET 可以多次刪除同一個(gè)資源,效果都是“資源不存在”,所以也是冪等的。
- POST 是“新增或提交數(shù)據(jù)”,多次提交數(shù)據(jù)會創(chuàng)建多個(gè)資源,所以不是冪等的。
- PUT 是“替換或更新數(shù)據(jù)”,多次更新一個(gè)資源,資源還是保持第一次更新的狀態(tài),所以是冪等的。

浙公網(wǎng)安備 33010602011771號