各位我們今天來看HTTP的請求與回應吧,我們今天來解析一下HTTP Request/Response的方法與標頭
我們再上一次圖
HTTP Request:向伺服器下訂單
首先,我們需要理解 HTTP 是客戶端(瀏覽器)跟伺服器之間溝通的共同語言。而 HTTP Request 就是客戶端用這種語言,向伺服器發出的一個「請求訊息」,好比是我們寫信或填寫一張訂單給店家。
一個完整的 HTTP Request 主要由三個部分組成:
請求行 (Request Line)
請求標頭 (Request Headers)
請求主體 (Request Message Body)
這是整個請求訊息的第一行,也是最核心的部分,直接表達了我們客戶端的意圖。
GET /doc/test.html HTTP/1.1
這一行包含了三個重要資訊:
HTTP 方法 (Method):GET
這表示客戶端想要執行的動作。GET 是最常見的方法,意思是「請給我資源」。其他常見的方法還有:
POST:向伺服器提交資料(例如,送出註冊表單)。
PUT/PATCH:更新伺服器上的資源(例如,修改留言內容)。
DELETE:刪除伺服器上的資源(例如,有人發了一篇逆風文然後刪掉XD)。
請求的資源路徑 (URI):/doc/test.html
這告訴伺服器客戶端想要的是哪一個資源。它通常是網站根目錄之後的路徑和檔名。
HTTP 協定版本:HTTP/1.1
這表示客戶端使用的是哪個版本的 HTTP 協定。伺服器需要知道這個版本才能正確地溝通。HTTP/1.1 是長期以來最廣泛使用的版本,現在也有更新的 HTTP/2 和 HTTP/3。
請求標頭用來提供關於這個請求的更多附加資訊。
Host: www.test101.com
必要標頭。它指定了目標伺服器的網域名稱。因為一台實體伺服器可能託管了多個網站,Host 標頭能讓伺服器知道客戶端到底要訪問的是哪一個網站。
Accept: image/gif, image/jpeg, /
告訴伺服器,客戶端可以接受哪些類型的內容(MIME 類型)。
Accept-Language: en-us
告訴伺服器,客戶端偏好的語言是美國英語 (en-us)。如果伺服器有多國語言版本,就可以根據這個標頭回傳對應的語言頁面。
Accept-Encoding: gzip, deflate
告訴伺服器,客戶端可以處理被壓縮過的內容。如果伺服器支援,它可以先將資料壓縮再傳送,以節省網路頻寬、加快傳輸速度。
User-Agent: Mozilla/4.0
用來識別客戶端的軟體資訊(作業系統、瀏覽器名稱與版本等)。
Content-Length: 35
表示請求主體 (Request Body) 的長度(單位是位元組)。這個標頭只在請求中帶有主體時才會出現(通常是 POST 或 PUT 請求)。
請求主體是選填的,它包含了要發送給伺服器的實際資料。
bookId=12345&author=Tan+Ah+Teck
用途:通常用在 POST 方法中。例如當我們提交一個網頁表單時,填寫的帳號、密碼、留言等資料就會被放在請求主體中。(不過HTTP是以明文傳輸的,如果沒有使用 HTTPS,你輸入的這些資料在駭客的眼中其實跟裸奔沒兩樣!)
格式:圖中的 key=value&key2=value2 是一種常見的表單編碼格式。現在更常用 JSON 格式在主體中傳遞資料,尤其是在 API 通訊中。
再來我們看這張圖
HTTP Response:來自伺服器的包裹與收據
如果說 HTTP Request 是我們對伺服器的「訂單」,那 HTTP Response 就是伺服器回覆給我們的「包裹跟收據」。
一個標準的 HTTP Response 同樣由三個部分組成:
狀態行 (Status Line)
回應標頭 (Headers)
回應主體 (Body)
這是回應訊息的第一行,也是最重要的部分,直接總結了伺服器對請求的處理結果。
HTTP/1.1 200 OK
這一行也包含了三個重要資訊:
HTTP 協定版本:HTTP/1.1
伺服器用來回應的 HTTP 協定版本。
狀態碼 (Status Code):200
最關鍵的資訊。一個三位數的數字,用來表示請求的處理結果。200 代表「成功 (Success)」。
狀態碼主要分為五大類:
2xx (成功):請求已成功處理。(例: 200 OK, 201 Created)
3xx (重定向):需要客戶端採取進一步的操作。(例: 301 Moved Permanently)
4xx (客戶端錯誤):請求有問題。(例: 404 Not Found - 找不到頁面, 403 Forbidden - 權限不足)
5xx (伺服器錯誤):伺服器端出錯。(例: 500 Internal Server Error)
狀態訊息 (Reason Phrase):OK
用來描述狀態碼的簡短文字,主要是給開發者看的。
回應標頭提供關於這個回應或伺服器本身的附加資訊。
Date: 伺服器產生此回應的日期和時間。
Server: 伺服器軟體的資訊(例如 Apache/2.2.14)。
Last-Modified: 請求的資源最後一次被修改的時間,可用於瀏覽器快取。
Content-Length: 回應主體 (Body) 的長度。
Content-Type: 最重要的標頭之一。它告訴瀏覽器回應主體的內容是什麼類型。例如 text/html 表示這是一份 HTML 文件;image/jpeg 則表示這是一張圖片。
Connection: 告知連線狀態,Closed 表示完成後關閉,keep-alive 表示保持連線以利後續請求。
在標頭和一個空白行之後,就是回應主體。這部分就是我們真正想要的內容,也就是你們現在看到的網頁頁面、圖片、影片等等。