你打開一個網站,在登入頁輸入帳號密碼,按下按鈕。畫面轉了一下,幾秒後首頁出現你的名字、通知和最近資料。從使用者的角度看,事情好像只發生在這一個頁面上;但對網站來說,剛才其實跨過了好幾層。有人負責讀取你按了哪個按鈕,有人把資料送出去,有人檢查帳號密碼,有人查資料庫,最後再把結果送回來。Frontend 和 Backend,就是用來描述這些工作大致分在哪裡的兩個詞。

Frontend,前端,通常指使用者直接接觸到、主要在瀏覽器或 App 裡執行的那一側;Backend,後端,通常指在伺服器上處理商業邏輯、權限、資料存取與其他內部工作的那一側。 兩者不是兩個互不相干的世界,而是同一個產品的不同部分。大部分現代網站,都是前端把需求送到後端,後端處理完再把結果送回前端。

先記一句:前端負責讓人操作系統,後端負責讓系統真的把事情做對。

你看到的東西,大多從前端開始

網頁上的文字、按鈕、表單、選單、動畫,以及你點擊後畫面怎麼變化,通常都屬於前端的範圍。最基本的網頁會用 HTML 描述內容結構、CSS 控制樣式,再用 JavaScript 處理互動;更大的產品可能再加上 React、Vue 或其他前端框架,但核心工作沒有因此改變:前端仍然是離使用者最近的那一層。

不過「前端就是畫畫面」也太窄了。當你在表單裡輸入 Email,前端可以先檢查有沒有漏掉 @;購物車裡商品數量改變時,前端可以立刻重算畫面上的總價;使用者切換頁籤、開啟對話框、拖曳檔案,這些互動也需要程式邏輯。只是這些邏輯主要執行在使用者自己的裝置上,而且凡是涉及真正的權限、安全或可信資料,不能只靠前端說了算。

後端處理的是你不該只相信畫面的事情

回到剛才的登入。前端可以確認密碼欄沒有空白,但它不能自己宣布「這個人登入成功」。真正的帳號資料不應該全部放在瀏覽器裡,更不能把資料庫密碼一起送給每個使用者。前端通常會把登入資訊送到後端,由後端確認帳號、驗證密碼、建立 session 或 token,再告訴前端這次登入成功還是失敗。

使用者輸入資料 → Frontend → Backend → 驗證 / 查資料 → Backend → Frontend → 更新畫面

同樣的道理也適用在成績系統、購物網站或社群平台。學生按下「修改成績」的按鈕時,就算有人自己改前端程式把這顆按鈕顯示出來,後端仍然必須檢查這個帳號到底有沒有修改權限;購物網站顯示一件商品 500 元,也不能單純相信瀏覽器回傳「我現在要用 1 元結帳」。重要規則要在可信的伺服器端重新確認,因為前端是在使用者能控制的環境裡執行。

API 是前端和後端之間常見的溝通方式

前端和後端需要交換資料,所以中間通常會有某種介面。Web 應用最常看到的就是 API。例如前端想載入你的個人資料,可能向後端送出一個 request;後端收到後確認你是誰、查需要的資料,再用 JSON 回傳 response。前端拿到結果後,才把名字、照片和設定放到畫面上。

Frontend → API request → Backend → Database
Frontend ← API response ← Backend ← Database

這個圖也剛好能說明另一個常見誤解:後端不等於資料庫。 資料庫是用來保存和查詢資料的系統,後端則負責接收要求、執行規則、處理權限,再決定要不要去讀寫資料庫。一個後端甚至可以同時連很多資料來源,也可以完全不使用傳統資料庫。

前端和後端不是靠程式語言分的

有些人第一次學時會記成「JavaScript 是前端,Python 是後端」,但這很快就會失效。JavaScript 可以在瀏覽器裡跑,也可以用 Node.js 在伺服器上跑;同一個 TypeScript 專案甚至可能同時包含前端和後端。反過來說,一套產品也可能用不同語言完成不同服務。

真正比較穩定的判斷方式,是看這段程式在哪裡執行,以及它負責什麼。程式主要在使用者裝置上處理介面和互動,比較接近 frontend;程式在伺服器上接收要求、執行規則、存取資料,比較接近 backend。技術棧會變,但這個責任邊界比較不容易變。

那 Server-side Rendering 算前端還是後端?

事情到現代 Web 會開始變得沒那麼整齊。以前常見的想像是後端產生 HTML,瀏覽器只負責顯示;後來很多網站把更多畫面邏輯搬到瀏覽器;現在又有 SSR、Server Components、Edge rendering 等做法,把部分原本看似「前端」的工作放回伺服器。

所以 frontend / backend 最好被當成一種系統責任的劃分,而不是永遠固定的實體牆。某段程式可能在伺服器上替前端預先產生畫面,但它仍然服務於使用者介面;某些 API 可能部署在 edge,而不是傳統的中央伺服器。架構會變,真正重要的是弄清楚:哪裡負責展示與互動、哪裡掌握可信規則、資料與權限。

Full-stack 又是什麼?

Full-stack 通常指一個開發者或一套工作範圍同時跨到前端和後端。它不是第三個獨立層,也不代表一個人必須精通所有東西。有人可以做出從資料庫、API 到網頁介面的完整功能,因此被稱為 full-stack;大型團隊仍可能把 UI、前端平台、後端服務、資料工程和基礎設施分給不同人。

真正開發一個功能時,你往往會看到兩邊一起變。新增「收藏文章」功能,前端要多一顆收藏按鈕和收藏狀態;後端要提供新增、取消和查詢收藏的 API;資料庫可能還要多一張表。這也是為什麼只看畫面,常常會低估一個看似很小的功能到底改了多少地方。

Frontend:使用者操作與看見的那一側,主要處理介面、互動和呈現。

Backend:伺服器上的那一側,主要處理規則、權限、資料存取與服務整合。

API:兩邊交換資料時常用的介面。

Database:負責保存與查詢資料,不等於 Backend 本身。

最後再回到那顆登入按鈕

當你下一次看到登入頁,不妨把它拆開看。輸入框的樣式、按鈕點下去的動畫、錯誤訊息怎麼出現,是前端在處理;帳號密碼是否正確、這個人有哪些權限、登入狀態要維持多久,是後端的工作;帳號資料可能存在資料庫裡;前後端則透過 API 或其他協定交換結果。

使用者最後看到的只是一個畫面,但真正的產品從來不只存在那個畫面裡。Frontend 和 Backend 的差別,不是「漂亮的部分」和「困難的部分」,而是同一個系統把不同責任放在不同位置。

如果 API 是兩套程式之間約好的入口,那 Frontend 和 Backend 就是最常站在這個入口兩側的角色之一。理解這個分工之後,Database、JSON、OAuth 和登入機制會開始變成同一張圖上的不同部分,而不是一堆分開背的名詞。

延伸閱讀

MDN:Client-server overview

MDN:Introduction to the server side