iT邦幫忙

2024 iThome 鐵人賽

DAY 9
1

前言

前幾天的文章介紹過了關於常見的網路架構:OSITCP/IP以及TCPUDP等重要協定,那當然在網址列上常常看到的 HTTP以及 HTTPs 更是必須要來介紹一下,那就讓我們繼續看下去吧~
/images/emoticon/emoticon42.gif

什麼是 HTTP?

HTTP(Hypertext Transfer Protocol,超文本傳輸協定)是一種用來傳輸超媒體文件(像是 HTML 文件)的應用層協定,被設計來讓瀏覽器和伺服器進行溝通,是一個無狀態、物件導向的協定,透過這個協定的規範標準化了各個不同網路系統間交換資料的格式,使得電腦能夠更快更好的去解析數據,也降低錯誤的發生。

在這個協定中,分為兩種角色: client 端以及 server 端,傳輸資料過程就是由 client 端向 server 端發出請求,server 端收到請求後再向 client 端發出回應。而關於HTTP協定,以及這些東西到底是為了什麼而誕生的,我在閱讀了Huli大神的從傳紙條輕鬆學習基本網路概念後有了一些較清楚的認知,如果有跟我一樣對於這些概念還是沒有很理解的話,可以去參考看看唷!

HTTP封包結構

https://ithelp.ithome.com.tw/upload/images/20240923/20167721EpUunCAZCF.png

此圖引用自MDN

從上圖來看,HTTP 的 request 主要包括以下四個部分:

  1. request-line:由下列三個元素所組成
    • request method:用於描述要進行的操作,常見的包括GET、POST、PUT、DELETE、PATCH...等。
    • URI:記載要發出請求的目標資源。
    • HTTP 協定版本
  2. headers:提供關於 client 端和請求的附加資訊,由key/value值組成,例如:
    • Host:localhost:8000,代表的是 Host 所指定的主機是本地伺服器。
    • User-Agent: Mozilla/5.0,代表的是 client 端所使用的瀏覽器資訊以及版本。
  3. empty-line:告訴 server 端以下不再是 header,用來分隔 header 跟 body。
  4. body:用來記錄正文,但不是每個 request-method 都會有,像是 GET 就是為了取得資料,因此不會附帶 body。

而 response 也是如同 request 一樣由四個部分組成,那裡面又各自紀錄什麼呢?

  1. status-line:由下列三個元素所組成
    • HTTP 協定版本
    • status code:描述 client 端對於 server 端所發出的請求結果,大致上可以分成以下類型
      • 1xx:請求已經接收,還在繼續處理中。
      • 2xx:請求成功處理。
      • 3xx:重定向,需要採取進一步的操作才能完成請求。
      • 4xx:client 端出現錯誤。
      • 5xx:server 端出現錯誤。
    • status text:關於 status code 的簡短文字敘述。
  2. headers:server 端提供的附加資訊,也以 key/value 值組成,例如:
    • content-type:html,表示回應的格式
  3. empty-line:告訴 client 端以下不再是 header,用來分隔 header 跟 body。
  4. body:包括回應的主文內容。

小結

今天簡單介紹了一下 HTTP 協定的用途以及封包的架構,看過今天的內容之後,以後再看到畫面出現404 NOT FOUND終於不會再滿頭問號拉!
/images/emoticon/emoticon07.gif

參考資料

RFC 1945(HTTP/1.0)
RFC 9110(HTTP/1.1)
MDN
HTTP 結構詳解


上一篇
DAY8 OSI模型如何運作?
下一篇
DAY10 關於 REST 的一些小事
系列文
從零開始的後端學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
fufu04
iT邦新手 5 級 ‧ 2024-09-25 13:26:27

每次看到404/images/emoticon/emoticon46.gif

我要留言

立即登入留言