在網路時代生活的我們,對於機器能聯網互動似乎覺得稀鬆平常。對前陣子從程式基礎邏輯、慢慢學習到前端開發、軟體運作等技術的我來說,甚至會以為自己應該懂了不少了吧!直到揭開網路真實面貌,我才發現越學越博大精深。
這個階段,我們要學習打造的全端產品,其實就是網路應用程式(web application),顧名思義就是能在網路上運行的軟體。從前端跨足後端/全端的關鍵,就是能親自打造 Web app 內部的運作機制。由於前端的瀏覽器及後端的伺服器通常運行在不同的機器上,當然也就牽涉機器間跨網路的溝通模式。
一旦能清楚、準確地描述「機器間跨網路的溝通」,如:
就有機會以程式碼來呈現內部運作的流程了。
從上圖能很清晰地透視,從客戶端(Client,可能是瀏覽器或 API 等)發出請求後,會進到伺服器端(Server,可能是雲端主機或機房等)。經歷總路由的分配後,分三個部分來處理:
完成後將相關資源回傳給客戶端。
在開頭提到的兩台機器,分別就是客戶端 (client-side)和伺服器端 (server-side)。
整個網路運作機制就圍繞在這兩端的互動,其中的重頭戲,就是處理客戶端發出的請求(Request)及伺服器端給予的回應(Response)。
然而,在尚未實作過機制的運作細節時,難免還是會感到抽象。所以我喜歡用本來就熟悉的概念來比喻。
透過物流比喻網路,可以把請求(Request)的資訊想像成訂單,而回應(Response)的資源類比為商品。
HTTP from Network in DevTools
在不同情境中,機器間被定義了各自的溝通語言,統稱為:「通訊協定 (Protocol)」。
而機器在網路間採用的是 HTTP(HyperText Transfer Protocol),中譯為「超文本傳輸協定」,也就是「電腦之間互相交流文件的溝通語言」。
在 Chrome 瀏覽器的 DevTools 中,可以點選 Network 查看 HTTP 的細節。
透過物流比喻網路,可以把請求(Request)的資訊想像成訂單,而回應(Response)的資源類比為商品。
接續前面提到的比喻,上圖這些購買及配送資訊,就類似 HTTP 的溝通內容。當中包含了給收發單位及傳遞者看的資訊,以及給消費者和商家的內容及商品。
實際的 HTTP 就包含上述的資訊,以下分別簡單講解。在接下來的實作中,會更加明白,這些資訊如何互動。
URL 結構
192.168.100.1
;而為了方便記憶通常會再向網域商租用一個網域名稱 (domain name),如 example.com 。在雲端部署的文章中會在細談。
關於本系列更多內容及導讀,請閱讀作者於 Medium 個人專欄 【無限賽局玩家 Infinite Gamer | Publication – 】 上的文章 《用 JavaScript 打造全端產品的入門學習筆記》系列指南。