Ⅰ HTTP請求,返回狀態碼詳解
HTTP協議,即超文本傳輸協議,是網際網路上應用最為廣泛的一種網路傳輸協議。所有的WWW文件都必須遵守這個標准,基於TCP/IP通信協議來傳遞數據。
HTTP是一個基於客戶端/服務端(C/S)架構模型的協議,通過一個可靠的鏈接來交換信息,是一個無狀態的請求/響應協議。一個HTTP "客戶端"是一個應用程序(如Web瀏覽器或其他),通過連接到伺服器來發送一個或多個HTTP的請求。一個HTTP "伺服器"同樣是一個應用程序(通常是Web服務,如Apache Web伺服器或IIS伺服器等),通過接收客戶端的請求並向客戶端發送HTTP響應數據。
HTTP 使用統一資源標識符(URI)來傳輸數據和建立連接。HTTP 請求包括以下四個部分:請求行(request line)、請求頭部(header)、空行和請求數據。HTTP1.0定義了三種請求方法(GET, POST 和 HEAD方法),而HTTP1.1新增了五種(OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法)。
HTTP 請求方式包括:
GET請求指定頁面信息並返回實體主體。
HEAD請求類似GET,但不返回內容,僅用於獲取報頭。
POST向指定資源提交數據進行處理請求,可能用於提交表單或上傳文件。可能有副作用,如用戶注冊、登錄等。
PUT從客戶端向伺服器傳送數據以替換指定的文檔。
DELETE請求伺服器刪除指定的頁面。
CONNECT用於將連接改為管道方式。
OPTIONS允許客戶端查看伺服器的性能。
TRACE回顯伺服器收到的請求,主要用於測試或診斷。
HTTP狀態碼分為四大類:
1xx信息提示:表示臨時響應,客戶端在收到常規響應之前應准備接收一個或多個1xx響應。
2xx成功:表示伺服器成功處理了客戶端的請求。
3xx重定向:需要進一步的操作以完成請求。
4xx客戶端錯誤:請求包含語法錯誤或無法完成請求。
5xx伺服器錯誤:伺服器在處理請求的過程中發生了錯誤。
1xx狀態碼包括:
100 Continue:繼續;初始請求已經接受,客戶端應繼續發送請求的其餘部分。
101 Switching Protocols:切換協議;伺服器將遵從客戶端請求轉換到另外一種協議。
2xx狀態碼包括:
200 OK:正常;對GET和POST請求的應答文檔跟在後面。
201 Created:已創建;伺服器已經創建了文檔,Location頭給出了它的URL。
202 Accepted:接受;已經接受請求,但處理尚未完成。
203 Non-Authoritative Information:非權威的信息;文檔已經正常地返回,但一些應答頭可能不正確,因為使用的是文檔的拷貝,非權威性信息。
204 No Content:沒有內容;瀏覽器應該繼續顯示原來的文檔。
205 Reset Content:重置內容;瀏覽器應該重置它所顯示的內容。
206 Partial Content:部分內容;客戶發送了一個帶有Range頭的GET請求,伺服器完成了它。
207 多狀態:緊跟消息體後面的是xml消息並且包含了多個單獨的響應狀態碼,響應的數量取決於子請求的個數。
208 已經報告:一個DAV的綁定成員被前一個請求枚舉,並且沒有被再一次包括。
226 IM Used:伺服器已經滿足了請求所要的資源,並且響應是一個或者多個實例操作應用於當前實例的結果。
3xx狀態碼包括:
300 Multiple Choices:客戶請求的文檔可以在多個位置找到,這些位置已經在返回的文檔內列出。如果伺服器要提出優先選擇,則應該在Location應答頭指明。
301 Moved Permanently:永久移動;客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
302 Found:發現;但新的URL應該被視為臨時性的替代,而不是永久性的。注意,在HTTP1.0中對應的狀態信息是「Moved Temporarily」。出現該狀態代碼時,瀏覽器能夠自動訪問新的URL,因此它是一個很有用的狀態代碼。注意這個狀態代碼有時候可以和301替換使用。例如,如果瀏覽器錯誤地請求 host/~user (缺少了後面的斜杠),有的伺服器返回301,有的則返回302。嚴格地說,我們只能假定只有當原來的請求是GET時瀏覽器才會自動重定向。
303 See Other:類似於301/302,不同之處在於,如果原來的請求是POST,Location頭指定的重定向目標文檔應該通過GET提取。
304 Not Modified:客戶端有緩沖的文檔並發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。伺服器告訴客戶,原來緩沖的文檔還可以繼續使用。
305 Use Proxy:客戶請求的文檔應該通過Location頭所指明的代理伺服器提取。
306 切換代理:不再使用。原意是隨後的請求應該使用指定的代理。
307 Temporary Redirect:許多瀏覽器會錯誤地響應302應答進行重定向,即使原來的請求是POST,即使它實際上只能在POST請求的應答是303時才能重定向。由於這個原因,HTTP 1.1新增了307,以便更加清除地區分幾個狀態代碼:當出現303應答時,瀏覽器可以跟隨重定向的GET和POST請求;如果是307應答,則瀏覽器只能跟隨對GET請求的重定向。
308 永久轉移:這個請求和以後的請求都應該被另一個URI地址重新發送。307、308和302、301有相同的表現,但是不允許HTTP方法改變。
4xx狀態碼包括:
400 Bad Request:錯誤請求;請求出現語法錯誤。
401 Unauthorized:未授權;訪問被拒絕,客戶試圖未經授權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,瀏覽器據此顯示用戶名字/密碼對話框,然後在填寫合適的Authorization頭後再次發出請求。IIS 定義了許多不同的 401 錯誤,它們指明更為具體的錯誤原因。
402 Need Payment:需要付款;為以後保留使用,原意是該狀態碼可被用於一些數字貨幣或者是微支付,但是目前還沒有普及,所以這些代碼不經常被使用。
403 Forbidden:禁止訪問;資源不可用。伺服器理解客戶的請求,但拒絕處理它。通常由於伺服器上文件或目錄的許可權設置導致。
404 Not Found:找不到;無法找到指定位置的資源。
404.0:沒有找到文件或目錄。
404.1:無法在所請求的埠上訪問 Web 站點。
404.2:Web 服務擴展鎖定策略阻止本請求。
404.3:MIME 映射策略阻止本請求。
405 Method Not Allowed:方法不允許;請求方法對指定的資源不適用。
406 Not Acceptable:不可接受;指定的資源已經找到,但其MIME類型和客戶在Accpet頭中所指定的不兼容。
407 Proxy Authentication Required:需要代理認證;要求進行代理身份驗證。
408 Request Timeout:請求超時;在伺服器許可的等待時間內,客戶一直沒有發出任何請求。
409 Conflict:沖突;通常和PUT請求有關。由於請求和資源的當前狀態相沖突,因此請求不能成功。
410 Gone:文檔已經不再可用,且伺服器不知道應該重定向到哪一個地址。它和404的不同在於,返回407表示文檔永久地離開了指定的位置,而404表示由於未知的原因文檔不可用。
411 Length Required:長度要求;伺服器不能處理請求,除非客戶發送一個Content-Length頭。
412 Precondition Failed:前置條件失敗;請求頭中指定的一些前提條件失敗。
41