「筆記」- 何謂 HTTP 傳輸協定
程式海無涯,聽說永遠學不完,那我只好一點一點把它們寫下來囉!
前一篇文章,我們介紹了網路溝通的概念與過程,而過程中提到的網頁請求 Request 和回傳 Response,則是 HTTP 傳輸協定的組合結構,接下來我們將更進一步來說明。
何謂傳輸協定?
以人類來說,在台灣,我們多數使用的是繁體中文,國際之間常見的溝通語言則是英文,套用到機器之間也會有既定的格式和語法。
下列讓我們舉一些常見的使用案例,分別介紹不同的傳輸協定:
・國高中時期,玩世界帝國或是 CS1.6 時,有人會負責開房,其他玩家則要連到他的電腦進行遊戲,這則是使用網路傳輸協定 (Internet Protocol) ,簡稱 IP 連線。(一不小心就透漏年紀了 XD)
・日常收發電子郵件,如 Gmail,則是使用簡易郵件傳輸協定 (Simple Mail Transfer Protocol),簡稱 SMTP 。
・網路文件交流,如同每天連線到 Facebook 瀏覽社群資料,這則是使用超文本傳輸安全協定 (Hypertext Transfer Protocol Secure),簡稱 HTTPS ,而他也建立在 HTTP 的基礎上,不過多了更安全的 SSL/TLS 來加密封包資料。
隨手可得的網頁 HTTP 內容
講了老半天,說好的 HTTP 在哪啊?(敲碗)
同學~~~這些在你的網頁上都有呀,快跟著引導來看看呦!
首先,隨意打開一個網頁,再從 DevTools 中選擇 Network 頁面,再重新整理網頁,則會跑出許多的項目內容,這都是從伺服器端回傳過來的資源,代表不同的檔案資源(如下圖紅色框內的檔案)。
接著,我們可以點選任一個項目,選擇 Headers 面板,即可查看這筆 Request / Response 裡 HTTP 的詳細資訊。(如下圖橘色框內的資料)。
HTTP 的組成結構
看過上面的小範例之後, 接下來讓我們仔細介紹 HTTP 的組成結構,分別是 HTTP Request 與 HTTP Response 這兩個大項目,如下圖。
*HTTP Request
首先,從客戶端發出 HTTP Request 時,通常會定義以下的資訊,以瀏覽 Google 首頁為例。
讓我們透過日常的郵政系統來比喻,假如我們今天要寄出一封信件,若我們選擇 [ GET ]掛號的寄件方式(Method),而地址(URL)是 Google 首頁(www.google.com), Message Body 則會是信件內容。
上述的內容代表我們要對 www.google.com 做一個[ GET ]的動作,而常見的 Method 方法如下:
- GET:讀取資料
- POST:新增資料(常搭配 form 標籤使用)
- PATCH:修改資料
- PUT:修改資料(若該筆資料不存在,則自動新增資料)
- DELETE:刪除資料
通常一個 Method 會搭配一個 URL,也會對應伺服器端一組特定的資源,而 Message Body 的內容則取決於每次的動作。
若單純是使用 GET 方法瀏覽網頁,則 Message Body 為空,但是,若以填寫表單為範例,那客戶端就會送出資料,這筆資料就會被傳送到伺服器的資料庫,此時,我們則會使用 POST 方法將資料送進 Message Body,提交給某個指定的 URL,進而建立資料或更新資料。
前面主要分享送出請求時的 HTTP Request,接下來,讓我們聊聊資料回傳時的 HTTP Response。
*HTTP Request
從伺服器端回傳 HTTP Response 時,通常會定義以下的資訊,以瀏覽 Google 首頁為例。
狀態碼 (status code) 對於一般人來說可能有些陌生,但想必你一定看過 404 Error 的訊息,這就是一種狀態碼的呈現,也是客戶端與伺服器端溝通的狀態情況。
瞭解這些狀態碼,不僅有助於我們瞭解網路發生問題的原因,也能幫助你與工程師日常的溝通協作,如:
- 1XX 訊息類 (收到請求,請求者繼續執行操作)
- 2XX 成功類 (操作被成功接受並處理),例如:200 成功回應
- 3XX 重定向類 (需進一步操作才能完成),例如:301 成功轉向
- 4XX 客戶端錯誤類 (請求語法錯誤或無法完成請求),例如:404 找不到資源
- 5XX 伺服器錯誤類 (後端的問題),例如:500 伺服器錯誤
更多狀態碼的資料可參考 HTTP 狀態碼列表。
過往做 BD 的時期,我有遇過 5XX 的情況,但我不了解這些網路資訊,導致我只能告訴工程師網站有問題,而不是直接告訴問題在哪個地方,我想這也是從中好好學習的機會吧。
此外, content-type 這個項目,它則會定義回應格式,例如 text/html、text/plain 或 application/json 等等,客戶端才會知道該如何打開訊息,而 Response Body 通常會是一個一個的程式碼檔案,最終,渲染畫面給使用者看。
這是一個熱愛挑戰,卻總是傷痕累累的故事,但這不就是人生嗎!如果你喜歡我的分享,請不要吝嗇給予拍手與掌聲,乾溫 :D