客戶端 (Client),指用來發起連線,
建構並發出 一或多個 請求 (request) 給伺服端,以傳達所需意圖者。
伺服端 (Server),是指監聽 (listen) 與接受 (accept)/拒絕 (reject) 連線,
並送回 一或多個 回應 (response),以服務客戶端者。
Client、Server 僅指特定連線的相對角色,
一個程式可能有時做為 Client,某些時候為 Server。
[註]:
在 HTTP/2 中,新增了一種交互模式 — — Server Push,
使 Server 能夠推測 Client 所需的資料,『主動』送出回應,進而增進效率。
User Agent vs. Origin Server
最直覺想到的 Client 就屬 瀏覽器 了,
不管是 Firefox、Google Chrome、Safari、Edge,還是 IE 🙄,
都是幫助我們 上網,瀏覽網頁,使用 HTTP 的程式。
HTTP 只是傳輸『協定』,並無規範使用方式,
使用的程式,除了瀏覽器,還有:
命令列工具、爬蟲 (Web crawler)、手機 APP、各種通訊設備、家電用品…,
任一這些 Client 程式,又稱為 User Agent (使用者代理),
其比 Client 一詞,更明確地指向『 代表 使用者 發起 請求的 程式 』。
如上所述,不該假定目前是 人類 使用者 在與 Server 進行互動,
這是實作上,需注意的地方。
就像 User Agent (使用者代理) 之於 Client (客戶端)。
Origin Server (源伺服器) 之於 Server (伺服端),
是指能針對 User Agent 給定的請求目標,「真正」具權威性的送出回應的 程式。
又譯為 原始伺服器、來源伺服器…,此系列以 源伺服器 為主。
咦!? 難道還有假的送出回應嗎?
Ans:
有的,當連線並非單純的 雙向連接 (bidirectional connection),
而是具有 中介 (Intermediary) 的 請求/回應鏈 時,
對 Client 來說 代理伺服器 (Proxy) 才是 Server。
而 Origin Server,能比 Server 一詞 更明確地指向:『 鏈接練的末端服務者 』。
同樣的:
不該假定 Origin Server 是個大型公共網站
可能有 可配置網路元件 (configurable networking components)、
視訊平台、機器人 (bot) 及其他特定服務…。