本資料是「企業發展概論」系列的一部分。上一篇文章:
你好!今天我們將了解HTTP和HTTPS協定。但首先,讓我們澄清一點:我們正在討論 OSI 模型應用層網路上的資料傳輸協定。您還記得,我們在之前的一篇文章中討論了 OSI 模型。如果你不記得了,就在這裡。
值得注意的是,HTTP 協定僅由文字組成。嗯,我們最感興趣的是這段文本所在的結構。每條訊息由三個部分組成:
什麼是資料傳輸協議
這是普遍接受的協議的名稱,不同服務的開發人員透過該協議以單一形式發送訊息。例如,使用Google Chrome,您可以從Facebook和Twitter獲取訊息,因為開發人員使用標準HTTP協定傳輸訊息,而您的瀏覽器可以處理它。統一的規則對於伺服器端開發人員本身來說也非常方便:有許多程式庫可以為您轉換資訊並使用所需的協定發送它。HTTP 最初被設想為傳輸 HTML 頁面的協定。很長一段時間都是這種情況,但現在程式設計師經常透過它傳輸字串和媒體檔案。總體而言,該協議通用且靈活,並且非常易於使用。現在讓我們弄清楚如何做到這一點。
HTTP結構
值得注意的是,HTTP 協定僅由文字組成。嗯,我們最感興趣的是這段文本所在的結構。每條訊息由三個部分組成:
- 起始線—定義服務資料。
- 標頭 - 訊息參數的描述。
- 訊息正文(Body)-訊息資料。必須用空白行與標題分隔。
簡單的 HTTP 請求是什麼樣的
GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
起始行包含:
- GET-請求方法;
- / ——請求路徑(path);
- HTTP/1.1 - 資料傳輸協定的版本。
- Host-請求所寄送的主機;
- User-Agent是發送請求的客戶端。
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com
{
"Id": 12345,
"User": "John"
}
請求發送到javarush.com/user/create/json,協定版本為HTTP/1.1。Accept指定客戶端期望接收什麼回應格式,Content-Type指定以什麼格式傳送訊息體。內容長度 - 正文中的字元數。HTTP 請求可以包含許多不同的標頭。更多細節可以在協議規範中找到。
HTTP 回應
伺服器收到請求後,進行處理並向客戶端發送回應:HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98
<html>
<head>
<title>An Example Page</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>
回應中的起始行包含協定版本(HTTP/1.1)、狀態代碼(200)、狀態描述(OK)。標題表明內容的類型和長度。回應正文包含瀏覽器將繪製到 HTML 頁面中的 HTML 程式碼。
回應狀態代碼
訊息正文和標頭的一切都很清楚,但值得對狀態代碼說幾句話。回應狀態代碼始終為三位數字,代碼的第一位數字表示回應的類別:- 1xx - 資訊性的。請求已收到,伺服器準備繼續;
- 2xx - 成功。請求已被接收、理解並處理;
- 3xx - 重定向。必須執行以下步驟來處理請求;
- 4xx - 客戶端錯誤。請求包含錯誤或不符合協議;
- 5xx - 伺服器錯誤。儘管請求的組成正確,但伺服器無法處理該請求;
- 200 OK-請求已收到並成功處理;
- 201 Created — 請求已收到並成功處理,導致建立新資源或其實例;
- 301 Moved Permanently - 所要求的資源已永久移動,後續對其的請求必鬚髮生在新地址;
- 307 暫時重定向 - 資源已暫時移動。目前,您可以使用自動重定向來存取它;
- 403 Forbidden-請求明確,但需要授權;
- 404 Not Found-伺服器沒有找到該位址的資源;
- 501 Not Implemented - 伺服器不支援回應此請求的功能;
- 505 HTTP Version Not Supported - 伺服器不支援指定版本的 HTTP 協定。
GO TO FULL VERSION