HTTP協議工作於客戶端-服務端架構爲上。 瀏覽器作爲HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。
HTTP默認端口號爲80, 但是你也可以改爲8080或者其他端口。
HTTP三點注意事項:
HTTP是無連接的: 無連接的含義是限制每次連接只處理一個請求。 服務器處理完客戶的請求, 並收到客戶的應答後, 即斷開連接。 採用這種方式可以節省傳輸時間。
HTTP是媒體獨立的: 這意味着, 只要客戶端和服務器知道如何處理的數據內容, 任何類型的數據都可以通過HTTP發送。 客戶端以及服務器指定使用適合的MIME-type內容類型。
HTTP是無狀態: HTTP協議是無狀態協議。 無狀態是指協議對於事務處理沒有記憶能力。 缺少狀態意味着如果後續處理需要前面的信息, 則它必須重傳, 這樣可能導致每次連接傳送的數據量增大。 另一方面, 在服務器不需要先前信息時它的應答就較快。
HTTP消息結構
HTTP是基於客戶端/服務端( C/S) 的架構模型, 通過一個可靠的鏈接來交換信息, 是一個無狀態的請求/響應協議。
一個HTTP"客戶端"是一個應用程序( Web瀏覽器或其他任何客戶端) , 通過連接到服務器達到向服務器發送一個或多個HTTP的請求的目 的。
一個HTTP"服務器"同樣也是一個應用程序(通常是一個Web服務, 如Apache Web服務器或IIS服務器等) , 通過接收客戶端的請求並向客戶端發送HTTP響應數據。
HTTP使用統一資源標識符( Uniform Resource Identifiers, URI) 來傳輸數據和建立連接。
一旦建立連接後, 數據消息就通過類似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展( MIME) [RFC2045]來傳送。
客戶端請求消息
客戶端發送一個HTTP請求到服務器的請求消息包括以下格式: 請求行( request line) 、 請求頭部( header) 、 空行和請求數據4個部分組成,下圖給出了請求報文的一般格式。
服務器響應消息
HTTP響應也由三個部分組成, 分別是: 狀態行、 消息報頭、 響應正文。
HTTP請求方法
根據HTTP標準, HTTP請求可以使用多種請求方法。
HTTP1 .0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1 .1 新增了五種請求方法: OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序號 | 方法 | 描述 |
1 | GET | 請求指定的頁面信息, 並返回實體主體。 |
2 | HEAD | 類似於get請求, 只不過返回的響應中沒有具體的內容, 用於獲取報頭 |
3 | POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件) 。 數據被包含在請求體中。 POST請求可 能會導致新的資源的建立和/或已有資源的修改。 |
4 | PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容 |
5 | DELETE | 請求服務器刪除指定的頁面。 |
6 | CONNECT | HTTP/1 .1 協議中預留給能夠將連接改爲管道方式的代理服務器。 |
7 | OPTIONS | 允許客戶端查看服務器的性能。 |
8 | TRACE | 回顯服務器收到的請求, 主要用於測試或診斷。 |
HTTP狀態碼
當瀏覽者訪問一個網頁時, 瀏覽者的瀏覽器會向網頁所在服務器發出請求。 當瀏覽器接收並顯示網頁前, 此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭( server header) 用以響應瀏覽器的請求。
HTTP狀態碼的英文爲HTTP Status Code。
下面是常見的HTTP狀態碼:
200 - 請求成功
301 - 資源(網頁等) 被永久轉移到其它URL
404 - 請求的資源(網頁等) 不存在
500 - 內部服務器錯誤
HTTP狀態碼分類
HTTP狀態碼由三個十進制數字組成, 第一個十進制數字定義了狀態碼的類型, 後兩個數字沒有分類的作用。 HTTP狀態碼共分爲5種類型:
分類 | 分類描述 |
1** | 信息, 服務器收到請求, 需要請求者繼續執行操作 |
2** | 成功, 操作被成功接收並處 |
3** | 重定向, 需要進一步的操作以完成請求 |
4** | 客戶端錯誤, 請求包含語法錯誤或無法完成請 |
5** | 服務器錯誤, 服務器在處理請求的過程中發生了錯誤 |