作爲一個開發人員,如果您經常跟客戶端、服務器打交道,肯定要懂點HTTP協議內容,對於開發調試至關重要。
HTTP協議 (HyperText Transfer Protocol,超文本傳輸協議)是因特網上應用最爲廣泛的一種網絡傳輸協議,所有的WWW文件都必須遵守這個標準。它是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。
簡單介紹一下內容:
1. HTTP的工作原理
2. HTTP的消息結構
3. HTTP的請求方式
4. HTTP的響應信息
5. HTTP的狀態碼類
6. HTTP Content-type
1. HTTP的工作原理
HTTP協議工作於客戶端-服務端架構爲上。瀏覽器作爲HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。
HTTP協議通信流程圖:
需要注意的是:
- HTTP無連接狀態:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。
- HTTP媒體獨立狀態:只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。
- HTTP無狀態:無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
2. HTTP的消息結構
HTTP是基於客戶端/服務端(C/S)的架構模型,通過一個可靠的鏈接來交換信息,是一個無狀態的請求/響應協議。
一個HTTP”客戶端”是一個應用程序(Web瀏覽器或其他任何客戶端),通過連接到服務器達到向服務器發送一個或多個HTTP的請求的目的,和通過接收客戶端的請求並向客戶端發送HTTP響應數據。
HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和建立連接。一旦建立連接後,數據消息就通過類似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]來傳送。
客戶端發送請求結構圖:
服務器響應消息圖:
3. HTTP的請求方式
常用的請求方式列表:
序號 | 方法 | 描述 |
---|---|---|
1 | GET | 請求指定的頁面信息,並返回實體主體。 |
2 | HEAD | 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
3 | POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。 |
4 | PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
5 | DELETE | 請求服務器刪除指定的頁面。 |
6 | CONNECT | HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。 |
7 | OPTIONS | 允許客戶端查看服務器的性能。 |
8 | TRACE | 回顯服務器收到的請求,主要用於測試或診斷。 |
4. HTTP的響應信息
參數列表:
應答頭 | 說明 |
---|---|
Allow | 服務器支持哪些請求方法(如GET、POST等)。 |
Content-Encoding | 文檔的編碼(Encode)方法。 |
Content-Length | 表示內容長度。 |
Content-Type | 表示後面的文檔屬於什麼MIME類型。 |
Date | 當前的GMT時間。 |
Expires | 應該在什麼時候認爲文檔已經過期,從而不再緩存它? |
Last-Modified | 文檔的最後改動時間。 |
Location | 表示客戶應當到哪裏去提取文檔。 |
Refresh | 表示瀏覽器應該在多少時間之後刷新文檔,以秒計。 |
Server | 服務器名字。Servlet一般不設置這個值,而是由Web服務器自己設置。 |
Set-Cookie | 設置和頁面關聯的Cookie。 |
WWW-Authenticate | 客戶應該在Authorization頭中提供什麼類型的授權信息? |
5. HTTP的狀態碼類
這是常見的HTTP狀態碼:
- 200 - 請求成功
- 301 - 資源(網頁等)被永久轉移到其它URL
- 404 - 請求的資源(網頁等)不存在
- 500 - 內部服務器錯誤
具體分類表:
分類 | 分類描述 |
---|---|
1** | 信息,服務器收到請求,需要請求者繼續執行操作 |
2** | 成功,操作被成功接收並處理 |
3** | 重定向,需要進一步的操作以完成請求 |
4** | 客戶端錯誤,請求包含語法錯誤或無法完成請求 |
5** | 服務器錯誤,服務器在處理請求的過程中發生了錯誤 |
6. HTTP Content-type
Content-Type,內容類型,一般是指網頁中存在的Content-Type,用於定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個文件,這就是經常看到一些Asp網頁點擊的結果卻是下載到的一個文件或一張圖片的原因。