HTTP協議學習筆記
阿新 • • 發佈:2021-08-09
參考文件:菜鳥教程
一、HTTP簡介
- 概念
HTTP:Hyper Text Transfer Protocol(超文字傳輸協議)。
用途:基於TCP/IP通訊協議,從全球資訊網(World Wide Web)伺服器傳輸超文字到本地伺服器。 - 工作原理
HTTP是客戶端與Web伺服器(C/S)之間的通訊協議,客戶端通過URL向伺服器傳送請求,伺服器接收到請求後向客戶端傳送響應資訊。
HTTP預設埠號為80,可修改。 - 注意:
① HTTP是無連線的,即限制每次廉潔只處理一個請求,伺服器發出響應並收到客戶端應答後就斷開連線,也就是不同請求之間相互獨立。好處是節省傳輸時間。
② HTTP是媒體獨立的,即任何客戶端和伺服器知道如何處理的資料內容都可以通過HTTP傳輸。
③ HTTP是無狀態的,即不會記憶之前的資訊,需要之前的資訊必須重傳。好處一是每次連線傳送的資料量增大,二是在伺服器不需要先前資訊時反應較快。 - HTTP協議通訊流程:
二、訊息結構
- 請求
客戶端傳送一個HTTP請求到伺服器的請求訊息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求資料四個部分組成,下圖給出了請求報文的一般格式。
示例:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
- 響應
HTTP響應也由四個部分組成,分別是:狀態行、訊息報頭、空行和響應正文,下圖給出了請求報文的一般格式。
HTTP/1.1 200 OK
Date: Mon, 9 Aug 2021 19:13:05 GMT
Context-Type: text/html; charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>My Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
三、請求方法
HTTP1.0定義了三種請求方法:GET、POST、HEAD;
HTTP1.1新增了六種請求方法:OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT。
序號 | 方法 | 描述 |
---|---|---|
1 | GET | 請求指定的頁面資訊,並返回實體主體。 |
2 | HEAD | 類似於GET請求,只不過返回的響應中沒有具體的內容,用於獲取報頭。 |
3 | POST | 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。 |
4 | PUT | 從客戶端向伺服器傳送的資料取代指定的文件的內容。 |
5 | DELETE | 請求伺服器刪除指定的頁面。 |
6 | CONNECT | HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。 |
7 | OPTIONS | 允許客戶端檢視伺服器的效能。 |
8 | TRACE | 回顯伺服器收到的請求,主要用於測試或診斷。 |
9 | PATCH | 是對PUT方法的補充,用來對已知資源進行區域性更新。 |
四、響應頭資訊
序號 | 響應頭 | 說明 |
---|---|---|
1 | Allow | 伺服器支援哪些請求方法(如GET、POST等)。 |
2 | Content-Encoding | 文件的編碼(Encode)方法。 |
3 | Content-Length | 表示內容長度。 |
4 | Content-Type | 表示後面的文件屬於什麼MIME型別。 |
5 | Date | 當前的GMT時間。 |
6 | Expires | 文件過期的時間 |
7 | Last-Modified | 文件的最後改動時間。 |
8 | Location | 表示客戶應當到哪裡去提取文件。 |
9 | Refresh | 表示瀏覽器應該在多少時間之後重新整理文件,以秒計。 |
10 | Server | 伺服器名字。 |
11 | Set-Cookie | 設定和頁面關聯的Cookie。Servlet不應使用response.setHeader("Set-Cookie", ...),而是應使用HttpServletResponse提供的專用方法addCookie。 |
12 | WWW-Authenticate | 客戶應該在Authorization頭中提供的授權資訊 |
五、狀態碼
HTTP響應的狀態行中包含一個狀態碼(HTTP Status Code),用以表示伺服器響應狀態。
常見的狀態碼:
- 200 - 請求成功
- 301 - 資源(網頁等)被永久轉移到其它URL
- 404 - 請求的資源(網頁等)不存在
- 500 - 內部伺服器錯誤
狀態碼由三個十進位制數字組成,第一個數字定義了狀態碼的型別,後兩位表示具體狀態。狀態碼可分為5類:
狀態碼 | 描述 |
---|---|
1** | 資訊,伺服器收到請求,需要請求者繼續執行操作。 |
2** | 成功,操作被成功接收並處理。 |
3** | 重定向,需要進一步的操作以完成請求。 |
4** | 客戶端錯誤,請求包含語法錯誤或無法完成請求。 |
5** | 伺服器錯誤,伺服器在處理請求的過程中發生了錯誤。 |
六、Content-Type
Content-Type:用於告訴客戶端實際返回的內容是什麼型別的,決定瀏覽器將以什麼形式、什麼編碼讀取這個檔案。
語法格式:Content-Type: text/html; charset=utf-8
常見的媒體格式型別如下:
序號 | Content-Type | 格式 |
---|---|---|
1 | text/html | HTML格式 |
2 | text/plain | 純文字格式 |
3 | text/xml | XML格式 |
4 | image/gif | gif圖片格式 |
5 | image/jpeg | jpg圖片格式 |
6 | image/png | png圖片格式 |
7 | application/xhtml+xml | XHTML格式 |
8 | application/xml | XML資料格式 |
9 | application/atom+xml | Atom XML聚合格式 |
10 | application/json | JSON資料格式 |
11 | application/pdf | pdf格式 |
12 | application/msword | Word文件格式 |
13 | application/octet-stream | 二進位制流資料(如常見的檔案下載) |
14 | application/x-www-form-urlencoded | |
15 | multipart/form-data | 需要在表單中進行檔案上傳時,就需要使用該格式 |