1. 程式人生 > 其它 >HTTP協議學習筆記

HTTP協議學習筆記

參考文件:菜鳥教程

一、HTTP簡介

  1. 概念
    HTTP:Hyper Text Transfer Protocol(超文字傳輸協議)。
    用途:基於TCP/IP通訊協議,從全球資訊網(World Wide Web)伺服器傳輸超文字到本地伺服器。
  2. 工作原理
    HTTP是客戶端與Web伺服器(C/S)之間的通訊協議,客戶端通過URL向伺服器傳送請求,伺服器接收到請求後向客戶端傳送響應資訊。
    HTTP預設埠號為80,可修改。
  3. 注意:
    ① HTTP是無連線的,即限制每次廉潔只處理一個請求,伺服器發出響應並收到客戶端應答後就斷開連線,也就是不同請求之間相互獨立。好處是節省傳輸時間。
    ② HTTP是媒體獨立的,即任何客戶端和伺服器知道如何處理的資料內容都可以通過HTTP傳輸。
    ③ HTTP是無狀態的,即不會記憶之前的資訊,需要之前的資訊必須重傳。好處一是每次連線傳送的資料量增大,二是在伺服器不需要先前資訊時反應較快。
  4. HTTP協議通訊流程:

二、訊息結構

  1. 請求
    客戶端傳送一個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
  1. 響應
    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
中預設的encType,form表單資料被編碼為key/value格式傳送到伺服器(表單預設的提交資料的格式)
15 multipart/form-data 需要在表單中進行檔案上傳時,就需要使用該格式