HTTP請求方法和響應狀態詳解
HTTP請求方法
HTTP1.0/1.1支持的所有請求方法如下所示:

GET
用來請求訪問已被URI識別的資源。指定的資源經服務器解析后返回響應內容。

POST
POST方法用來傳輸實體的主體(一般是身份認證信息數據或者是請求服務的參數數據),雖GET方法也能做到,但一般不用。POST的功能和GET很類似,但POST的主要目的並不是獲取響應的主體內容。

PUT
PUT方法用來傳輸文件,要求在請求報文的主體中包含文件內容,然后將文件保存請求URI指定的位置。
但是由於PUT方法自身不帶驗證機制,所以為了保障Web網站安全(防止惡意文件上傳),一般不使用PUT方法。

狀態碼204表明文件傳輸成功,且沒有數據返回。
DELETE
DELETE用來刪除文件,是與PUT方法完全相反的方法,使用DELETE方法可以按照請求URI刪除指定的資源。同樣,DELETE方法本身也不帶驗證機制,一般Web網站都不會使用DELETE方法。
HEAD
HEAD方法和GET方法一樣,只是不返回響應報文的主體部分,一般用來確認URI的有效性以及資源更新的日期時間。

上述例子通過HEAD方法請求響應得到響應報文的首部,根據首部就可以確認請求URI是否有效以及請求資源的更新時間。
Options
OPTIONS方法用來查詢針對請求URI指定資源支持的請求方法。

上述例子表明請求URI指定資源支持的請求方法有GET、POST、HEAD、OPTIONS。
HTTP響應狀態碼
響應狀態碼的職責在於告知客戶端請求的處理結果。

五類響應狀態碼
在三位的響應狀態碼中,第一位代表了相應的類別,后兩位無任何含義,只是狀態碼的代號。

在上述五類響應狀態碼中,着重關注成功狀態碼(2XX)、客戶端錯誤狀態碼(4XX)以及服務器錯誤狀態碼(5XX)。
200 OK
表示請求被正常處理。而根據不同請求方法,得到的響應報文中的響應實體信息也不同。

例如,使用GET方法,對應請求資源的實體會作為響應實體返回;而使用HEAD方法時,響應實體中只包含請求資源的實體首部信息(不會返回主體部分)。
204 No Content
請求已成功處理,但是返回的響應報文中不包含實體的主體部分。

一般在只需要從客戶端往服務器發送信息,而對客戶端不需要發送新信息內容時使用。
206 Partial Content
當客戶端發起的是HTTP范圍請求(即請求頭中使用了字段Range),服務器若成功執行,則返回響應碼206。

301 Moved Permanently
永久重定向,表明請求的資源已被分配了新的URI,以后請求該資源應使用新的URI。
302 Found
臨時重定向,請求的資源被分配了臨時的新URI,希望用戶本次能使用新的URI請求該資源。
303 See Other
功能和302相同,但明確的表示客戶端應采用GET方法獲取資源。
304 Not Modified
客戶端發送了附帶條件的請求時,服務器端允許請求訪問資源,但是請求條件未滿足的情況。
400 Bad Request
該狀態碼表示請求報文存在語法錯誤,需要對請求內容進行修改后再次進行請求。
401 Unauthorized
若之前沒有進行請求,則表示客戶端發送的請求需要包含通過HTTP認證的認證信息;若之前已經進行過請求,則表示用戶認證失敗。

返回401的響應中必須包含一個WWW-Authenticate首部用以質詢用戶信息,瀏覽器初次接收到401響應時,會彈出認證用的對話窗口。
403 Forbidden
拒絕對請求資源的訪問,發生403的情況:
- 未獲得文件系統訪問權限
- 使用受限制的IP地址訪問網站資源
404 Not Found
- 服務器上找不到請求的資源
- 拒絕請求但不想向客戶端表明原因
500 Internal Server Error
- 服務器端在執行請求時發生了錯誤
- Web應用存在bug或者出現臨時故障
503 Service Unavailable
服務器此時無法處理請求(服務暫時不可用)。出現503的可能原因:
- 服務器暫時處於超負荷狀態
- 服務器正進行停機維護
如果事先得知解除上述狀況需要的時間,服務端最好在響應報文中寫入Retry-After首部字段再返回給客戶端。
參考資料
《圖解HTTP》 by 上野宣
