- 快速搞定Spring Boot+Vue全棧開發
- 劉偉編著
- 3758字
- 2024-12-31 21:04:03
1.1 Web應用開發概述
本節將介紹Web應用的基本概念、B/S與C/S架構的差異、B/S架構的工作原理以及HTTP協議。
1.1.1 什么是Web應用
Web應用(Web application),是指那些通過互聯網訪問和交互的軟件應用程序。用戶通常使用網絡瀏覽器作為客戶端來訪問并與這些應用交互。Web應用與傳統的桌面應用不同,它不需要在個人計算機上安裝特定的軟件,只需要一個支持的網頁瀏覽器。它們通過互聯網向用戶提供服務和功能,無論用戶身處何地,都能通過瀏覽器來訪問這些應用。這種開放性、跨平臺性以及無須安裝的特點,讓Web應用在現代社會中扮演著不可或缺的角色。
Web應用之所以能夠如此靈活地為用戶提供服務,要歸功于一種被廣泛采用的架構模式——B/S架構。B/S架構,也稱為瀏覽器/服務器(browser/server)架構,是一種網絡應用程序架構。在B/S架構中,用戶界面和客戶端邏輯大多數情況下都在網絡瀏覽器中實現,而應用服務器則負責處理業務邏輯、數據和存儲。
B/S架構將Web應用的構建分為前端和后端兩個關鍵組成部分,它們各自擔負著不同的任務,共同構筑一個無縫的用戶體驗。
1.前端:用戶交互的界面
前端是用戶直接互動的應用程序部分,即用戶界面。在Web開發中,前端特指在瀏覽器中運行的部分,涵蓋頁面布局、設計和交互性功能。前端的核心任務是通過瀏覽器向用戶展示Web應用的外觀和功能。常用的Web前端技術如下。
HTML:構建網頁內容的結構。
CSS:設定網頁的樣式和外觀。
JavaScript:賦予網頁交互性。
框架和庫:如React、Angular、Vue.js等,用于開發復雜的前端應用。
前端開發者的職責包括構建用戶友好的界面,確保應用在不同設備和瀏覽器上的兼容性,并優化整體的用戶體驗。
2.后端:數據處理的核心
后端是在服務器上運行的應用程序部分,負責處理業務邏輯和數據操作。在B/S架構中,后端從數據庫檢索數據,執行計算和邏輯處理,然后將結果傳送至前端。后端開發涉及多種編程語言和框架,以便高效處理請求、管理數據,并響應用戶的操作。常用的Web后端技術如下。
編程語言:如Java、Python、Ruby、Node.js、PHP等。
數據庫:如MySQL、PostgreSQL、MongoDB等,用于數據存儲。
服務器:如Apache、Nginx、Tomcat等。
框架:如Spring Boot(Java),Express.js(Node.js)、Django(Python)等。
后端開發者負責實現業務邏輯,保證數據的安全性和完整性,并構建供前端使用的API(application programming interface,應用程序編程接口)。
3.前后端協作:構建完整的Web應用
在B/S架構中,前端和后端通過HTTP協議通信,API定義了數據交換的方式。前端向后端發送請求以獲取數據,后端處理這些請求并返回處理結果。這種協作機制為用戶提供了豐富的應用功能,同時隱藏了底層技術細節。
如果開發者既懂前端開發,也懂后端開發,可以稱為全棧(full stack)開發,全棧開發者有能力構建整個應用程序,從用戶界面到服務器和數據庫。全棧開發者可以參與項目的整個生命周期,從需求分析、設計、開發到部署和維護。
隨著技術的進步,前端和后端的界限變得越來越模糊。例如,某些前端框架(如Next.js和Nuxt.js)提供后端功能,而某些后端技術(如Node.js)也可用于前端開發。
4.前后端架構分離
前后端分離是現代Web開發的重要趨勢,它強調前端(用戶界面)和后端(服務器邏輯和數據處理)之間的清晰界限。在這種架構下,前端通過API(通常是RESTful API)與后端交互。前端發送API請求,后端處理這些請求并以JSON或XML格式返回數據。這種模式使得一個后端能夠支持多個前端應用(如Web、移動、桌面應用)。
與傳統的靜態網站不同,B/S架構中的Web應用可以動態生成頁面內容。例如,根據用戶的輸入或數據庫中的數據,服務器可以動態地生成HTML頁面,這種方式通常稱為服務端渲染,當然頁面也可以在瀏覽器端根據服務端返回的數據生成,稱為客戶端渲染。
前后端分離還允許不同的開發團隊使用各自的技術棧進行開發,并實現獨立部署。這種獨立性使得前后端可以根據需要進行單獨的擴展,例如,增加后端服務器以應對增加的數據處理需求,而不影響前端。
目前,前后端分離技術主要采用客戶端渲染方法,這一趨勢得益于Ajax技術和現代JavaScript框架(如React、Angular和Vue.js)的發展。這些技術使得B/S架構中的前端和后端可以更加清晰地分離。前后端分離的方法將用戶界面與業務邏輯和數據處理分開,帶來了多種優勢,但同時也面臨如下一些挑戰。
安全性:API的開放性可能導致新的安全威脅,需要確保API端點的安全。
CORS:前后端分離可能會遇到CORS(cross origin resource sharing,跨域資源共享)的問題,這需要特別處理,以確保資源的正確共享。
SEO:傳統的客戶端渲染方法可能對SEO(search engine optimization,搜索引擎優化)產生不利影響。然而,現代的前端框架和工具,如服務器端渲染(SSR),已經可以有效地解決這一問題,提升網頁在搜索引擎中的表現。
1.1.2 B/S架構與C/S架構
C/S(client/server)架構是一種兩層架構,通常也稱作客戶端/服務器架構。在這個架構中,服務器運行服務端程序,而客戶端設備上安裝客戶端軟件。服務端負責后臺業務邏輯和數據處理,而客戶端則處理前端界面和用戶交互。
C/S架構的主要優點是充分利用客戶端PC的處理能力,提高響應速度。然而,這也意味著需要考慮不同操作系統和硬件平臺的兼容性,并且在應用更新時需要逐個更新客戶端軟件。
相比之下,B/S架構特別適用于Web應用程序,如社交媒體、在線購物和博客平臺。這種架構允許用戶通過Web瀏覽器訪問服務器上的功能,無須在本地設備上安裝任何應用程序。
C/S架構和B/S架構的主要特點和差異如表1-1所示。
表1-1 C/S架構與B/S架構的主要特點和差異

在選擇這兩種架構時,需要考慮多個因素,如應用的交互性、跨平臺訪問、維護和更新的需求、性能等。最終的選擇通常取決于應用的性質和目標用戶的需求。
例如,對于需要高度交互性和實時性能的應用,如在線游戲和圖形處理應用,C/S架構可能更為合適。而對于需要跨平臺、分布式訪問和實時更新的Web應用,B/S架構更為理想。
1.1.3 B/S架構的工作原理
B/S架構中的數據交互過程開始于用戶在瀏覽器中輸入URL并按下Enter鍵,由此觸發了一系列復雜的步驟。
(1)瀏覽器緩存檢查。瀏覽器會檢查它的緩存中是否有請求的URL的資源(包括頁面、圖片等)。如果存在匹配項且未過期,則瀏覽器可以直接從緩存中加載資源,而無須通過網絡請求。
(2)DNS查詢。如果資源不在緩存中,則瀏覽器會進行DNS查詢,將可讀的域名(如www.example.com)解析為一個IP地址。這通常涉及查詢本地的DNS緩存、操作系統的DNS緩存、路由器的DNS緩存,或者可能是一個遠程的DNS服務器。
(3)建立TCP連接。獲取IP地址后,瀏覽器與目標服務器將建立一個TCP連接,以進行后續的通信。這個過程包括一個稱為三次握手的過程。
(4)發送HTTP請求。TCP連接建立后,瀏覽器會通過這個連接發送一個HTTP請求到服務器。這個請求包括了請求的資源、方法(如GET或POST)和一些其他的頭部信息。
(5)服務器處理。服務器收到HTTP請求后,通常會通過Web服務器軟件(如Apache、Nginx或IIS)進行處理。對于動態內容,如PHP、Python或Node.js腳本,服務器可能會交給相應的處理器進行處理。
(6)服務器響應。服務器處理完成后,會發送一個HTTP響應回到瀏覽器。這個響應包括一個狀態碼(如200 OK、404 Not Found等)、響應頭部信息,以及請求的實際數據或內容。
(7)HTTPS/TLS握手。如果URL的前綴是HTTPS,那么在TCP連接之后和發送HTTP請求之前,瀏覽器和服務器之間會進行TLS握手,以安全地加密和解密傳輸的數據。
(8)渲染頁面。瀏覽器開始解析返回的HTML、CSS和JavaScript。它會構建DOM(文檔對象模型)和CSSOM(CSS對象模型),并執行JavaScript,最后呈現頁面給用戶。
(9)加載其他資源。HTML頁面可能還包含其他資源的引用,如圖片、視頻、CSS文件、JavaScript文件等。瀏覽器會繼續為這些資源發起額外的HTTP請求,并在收到響應數據后進行處理或渲染。
(10)關閉TCP連接。數據傳輸完成后,瀏覽器和服務器會關閉TCP連接。但如果使用了HTTP/2協議,則連接可能會保持開放,用于后續的請求。
1.1.4 HTTP協議
瀏覽器與服務器之間數據的傳輸離不開通信協議,而B/S架構的核心是HTTP協議。HTTP是一種無狀態的請求/響應協議,這意味著每個請求都是獨立的,服務器不會“記住”之前的請求。HTTP有多種請求方法,如GET、POST、PUT、DELETE等,分別支持不同的操作。HTTP響應包括狀態代碼,如200 OK、404 Not Found等,用于表示請求的結果。
理解HTTP的無狀態特性的關鍵點如下。
獨立的請求:每次HTTP請求都是完整的。從一個請求開始,服務器處理,然后返回響應,這個請求就結束了。服務器不會(基于HTTP協議本身)“記住”這個請求。
無法記憶:假設你在一個電商網站上登錄并添加了一個商品到購物車,但是當你嘗試去結賬時,如果HTTP是完全無狀態的,則服務器會“忘記”你是誰以及你加入購物車的商品是什么。
設計成無狀態的原因:HTTP的無狀態性有助于簡化服務器的設計,因為服務器不需要保存與每個客戶端的會話相關的信息。這也使得Web服務可以更輕松地擴展,因為新的請求可以由任何可用的服務器處理,而不必擔心丟失與先前請求的狀態相關的信息。盡管HTTP本身是無狀態的,但Web應用往往需要維護管理狀態(例如,跟蹤用戶是否登錄,用戶的購物車內容等)。為了解決這個問題,Web開發者使用了一些技巧和工具,如Cookies、URL參數、隱藏的表單字段和服務器端的session存儲。
Cookies:當用戶首次登錄一個網站時,服務器可能會發送一個Cookie給瀏覽器。此后,每次發出請求,瀏覽器都會自動攜帶這個Cookie,這樣服務器就可以“識別”用戶了。
Session:服務器可以使用由Cookie或其他機制提供的ID來存儲有關用戶的狀態信息。這些信息保存在服務器上,每次請求時,服務器可以使用ID來查找和使用該信息。
在后續章節中會詳細介紹RESTful API設計,無狀態是其核心原則之一。每個請求應該包含所有必要的信息供服務器處理。這確保了服務器可以自由地處理任何請求,而不需要考慮之前的請求。
- 精通Nginx(第2版)
- MySQL數據庫管理實戰
- TensorFlow Lite移動端深度學習
- Pandas Cookbook
- Python測試開發入門與實踐
- 人人都懂設計模式:從生活中領悟設計模式(Python實現)
- 用戶體驗增長:數字化·智能化·綠色化
- Mastering Python Design Patterns
- 平面設計經典案例教程:CorelDRAW X6
- R語言實戰(第2版)
- Python數據科學實踐指南
- Office VBA開發經典:中級進階卷
- Computer Vision with Python 3
- Swift編程實戰:iOS應用開發實例及完整解決方案
- Daniel Arbuckle's Mastering Python