官术网_书友最值得收藏!

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設計,無狀態是其核心原則之一。每個請求應該包含所有必要的信息供服務器處理。這確保了服務器可以自由地處理任何請求,而不需要考慮之前的請求。

主站蜘蛛池模板: 北票市| 新营市| 鹤峰县| 信宜市| 静宁县| 循化| 前郭尔| 尤溪县| 会昌县| 台山市| 洪江市| 永兴县| 秭归县| 罗山县| 蓬莱市| 涟源市| 济源市| 繁昌县| 洮南市| 漳平市| 乌兰察布市| 浏阳市| 苏州市| 沿河| 玛曲县| 南乐县| 新巴尔虎右旗| 密山市| 贵州省| 泾川县| 平潭县| 景宁| 伊春市| 兰考县| 盐池县| 磐石市| 罗源县| 柳州市| 务川| 苏尼特右旗| 昌乐县|