1. 程式人生 > 其它 >Http協議&狀態碼

Http協議&狀態碼

什麼是Http協議

Http協議即超文字傳送協議 (HTTP-Hypertext transfer protocol) 。是一個簡單的請求-響應協議,它通常執行在TCP之上。

它定義了瀏覽器(即全球資訊網客戶程序)怎樣向全球資訊網伺服器請求全球資訊網文件,以及伺服器怎樣把文件傳送給瀏覽器。

請求和響應訊息的頭以ASCII形式給出;而訊息內容則具有一個類似MIME的格式。

從層次的角度看,HTTP是面向(transaction-oriented)應用層協議,它是全球資訊網上能夠可靠地交換檔案(包括文字、聲音、影象等各種多媒體檔案)的重要基礎。並且詳細的規定了客戶端瀏覽器與伺服器之間互相通訊的規則。

它使開發和部署非常地直截了當。

工作原理

HTTP是基於客戶/伺服器模式,且面向連線的。典型的HTTP事務處理有如下的過程:

(1)客戶與伺服器建立連線;

(2)客戶向伺服器提出請求;

(3)伺服器接受請求,並根據請求返回相應的檔案作為應答;

(4)客戶與伺服器關閉連線。

特性

  • 客戶與伺服器之間的HTTP連線是一種一次性連線

它限制每次連線只處理一個請求,當伺服器返回本次請求的應答後便立即關閉連線,下次請求再重新建立連線。

  • HTTP是一種無狀態協議,即伺服器不保留與客戶交易時的任何狀態。

這就大大減輕了伺服器記憶負擔,從而保持較快的響應速度。HTTP是一種面向物件的協議。允許傳送任意型別的資料物件。

  • HTTP支援持久連線。

在HTTP / 0.9和1.0中,連線在單個請求/響應對之後關閉。在HTTP / 1.1中,引入了保持活動機制,其中連線可以重用於多個請求。

  • 從技術上講是客戶在一個特定的TCP埠(埠號一般為80)上開啟一個套接字。

如果伺服器一直在這個周知的埠上傾聽連線,則該連線便會建立起來。然後客戶通過該連線傳送一個包含請求方法的請求塊。

  • HTTP規範定義了9種請求方法。

每種請求方法規定了客戶和伺服器之間不同的資訊交換方式,常用的請求方法是GET和POST。伺服器將根據客戶請求完成相應操作,並以應答塊形式返回給客戶,最後關閉連線。

HTTP1.0定義了三種請求方法:GET、POST、HEAD

HTTP1.1定義了六種請求方法:PUT、DELETE、PATCH、OPTIONS、CONNECT、TRACE

1.get    請求指定頁面的資訊,並返回實體主體(冪等)

2.post    向指定資源提交資料進行處理請求,資料存在請求體(非冪等)

3.head   類似get,但不返回具體內容,用於獲取報頭(冪等)

4.put   完整替換更新指定資源資料,沒有就新增(冪等)

5.delete   刪除指定資源的資料(冪等)

6.patch   部分更新指定資源的資料(非冪等)

7.options  允許客戶端檢視伺服器的支援的http請求方法

8.connect  預留給能將連線改為管道的代理伺服器

9.trace   追蹤伺服器收到的請求,用於測試或診斷

報文格式

HTTP報文由從客戶機到伺服器的請求和從伺服器到客戶機的響應構成。

請求報文格式如下:

請求行 - 通用資訊頭 - 請求頭 - 實體頭 - 報文主體

請求行以方法欄位開始,後面分別是URL欄位和HTTP協議版本欄位,並以CRLF結尾。SP是分隔符。除了在最後的CRLF序列中CF和LF是必需的之外,其他都可以不要。有關通用資訊頭,請求頭和實體頭方面的具體內容可以參照相關檔案。

應答報文格式如下:

狀態行 - 通用資訊頭 - 響應頭 - 實體頭 - 報文主體

狀態碼元由3位數字組成,表示請求是否被理解或被滿足。原因分析是對原文的狀態碼作簡短的描述,狀態碼用來支援自動操作,而原因分析用來供使用者使用。客戶機無需用來檢查或顯示語法。有關通用資訊頭,響應頭和實體頭方面的具體內容可以參照相關檔案。

狀態碼資訊

1xx:資訊

訊息 描述
100 Continue 伺服器僅接收到部分請求,但是一旦伺服器並沒有拒絕該請求,客戶端應該繼續傳送其餘的請求。
101 Switching Protocols 伺服器轉換協議:伺服器將遵從客戶的請求轉換到另外一種協議。

2xx:成功

訊息 描述
200 OK 請求成功(其後是對GET和POST請求的應答文件。)
201 Created 請求被建立完成,同時新的資源被建立。
202 Accepted 供處理的請求已被接受,但是處理未完成。
203 Non-authoritative Information 文件已經正常地返回,但一些應答頭可能不正確,因為使用的是文件的拷貝。
204 No Content 沒有新文件。瀏覽器應該繼續顯示原來的文件。如果使用者定期地重新整理頁面,而Servlet可以確定使用者文件足夠新,這個狀態程式碼是很有用的。
205 Reset Content 沒有新文件。但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容。
206 Partial Content 客戶傳送了一個帶有Range頭的GET請求,伺服器完成了它。

3xx:重定向

訊息 描述
300 Multiple Choices 多重選擇。連結列表。使用者可以選擇某連結到達目的地。最多允許五個地址。
301 Moved Permanently 所請求的頁面已經轉移至新的url。
302 Found 所請求的頁面已經臨時轉移至新的url。
303 See Other 所請求的頁面可在別的url下被找到。
304 Not Modified 未按預期修改文件。客戶端有緩衝的文件併發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文件)。伺服器告訴客戶,原來緩衝的文件還可以繼續使用。
305 Use Proxy 客戶請求的文件應該通過Location頭所指明的代理伺服器提取。
306 Unused 此程式碼被用於前一版本。目前已不再使用,但是程式碼依然被保留。
307 Temporary Redirect 被請求的頁面已經臨時移至新的url。

4xx:客戶端錯誤

訊息 描述
400 Bad Request 伺服器未能理解請求。
401 Unauthorized 被請求的頁面需要使用者名稱和密碼。
401.1 登入失敗。
401.2 伺服器配置導致登入失敗。
401.3 由於ACL對資源的限制而未獲得授權。
401.4 篩選器授權失敗。
401.5 ISAPI/CGI應用程式授權失敗。
401.7 訪問被Web伺服器上的URL授權策略拒絕。這個錯誤程式碼為IIS 6.0所專用。
402 Payment Required 此程式碼尚無法使用。
403 Forbidden 對被請求頁面的訪問被禁止。
403.1 執行訪問被禁止。
403.2 讀訪問被禁止。
403.3 寫訪問被禁止。
403.4 要求SSL。
403.5 要求SSL 128。
403.6 IP地址被拒絕。
403.7 要求客戶端證書。
403.8 站點訪問被拒絕。
403.9 使用者數過多。
403.10 配置無效。
403.11 密碼更改。
403.12 拒絕訪問對映表。
403.13 客戶端證書被吊銷。
403.14 拒絕目錄列表。
403.15 超出客戶端訪問許可。
403.16 客戶端證書不受信任或無效。
403.17 客戶端證書已過期或尚未生效。
403.18 在當前的應用程式池中不能執行所請求的URL。這個錯誤程式碼為IIS 6.0所專用。
403.19 不能為這個應用程式池中的客戶端執行CGI。這個錯誤程式碼為IIS 6.0所專用。
403.20 Passport登入失敗。這個錯誤程式碼為IIS 6.0所專用。
404 Not Found 伺服器無法找到被請求的頁面。
404.0 (無)–沒有找到檔案或目錄。
404.1 無法在所請求的埠上訪問Web站點。
404.2 Web服務擴充套件鎖定策略阻止本請求。
404.3 MIME對映策略阻止本請求。
405 Method Not Allowed 請求中指定的方法不被允許。
406 Not Acceptable 伺服器生成的響應無法被客戶端所接受。
407 Proxy Authentication Required 使用者必須首先使用代理伺服器進行驗證,這樣請求才會被處理。
408 Request Timeout 請求超出了伺服器的等待時間。
409 Conflict 由於衝突,請求無法被完成。
410 Gone 被請求的頁面不可用。
411 Length Required "Content-Length"未被定義。如果無此內容,伺服器不會接受請求。
412 Precondition Failed 請求中的前提條件被伺服器評估為失敗。
413 Request Entity Too Large 由於所請求的實體的太大,伺服器不會接受請求。
414 Request-url Too Long 由於url太長,伺服器不會接受請求。當post請求被轉換為帶有很長的查詢資訊的get請求時,就會發生這種情況。
415 Unsupported Media Type 由於媒介型別不被支援,伺服器不會接受請求。
416 Requested Range Not Satisfiable 伺服器不能滿足客戶在請求中指定的Range頭。
417 Expectation Failed 執行失敗。
423 鎖定的錯誤。

5xx:伺服器錯誤

訊息 描述
500 Internal Server Error 請求未完成。伺服器遇到不可預知的情況。
500.12 應用程式正忙於在Web伺服器上重新啟動。
500.13 Web伺服器太忙。
500.15 不允許直接請求Global.asa。
500.16 UNC授權憑據不正確。這個錯誤程式碼為IIS 6.0所專用。
500.18 URL授權儲存不能開啟。這個錯誤程式碼為IIS 6.0所專用。
500.100 內部ASP錯誤。
501 Not Implemented 請求未完成。伺服器不支援所請求的功能。
502 Bad Gateway 請求未完成。伺服器從上游伺服器收到一個無效的響應。
502.1 CGI應用程式超時。
502.2 CGI應用程式出錯。
503 Service Unavailable 請求未完成。伺服器臨時過載或宕機。
504 Gateway Timeout 閘道器超時。
505 HTTP Version Not Supported 伺服器不支援請求中指明的HTTP版本。