服務器端腳本
服務器端腳本是Web開發中使用的一種技術,涉及在Web服務器上使用腳本,該腳本為每個用戶(客戶端)對網站的請求生成定製的響應。腳本可以用任何可用的服務器端腳本語言編寫。服務器端腳本與客戶端腳本不同,客戶端腳本(例如JavaScript)嵌入到Web瀏覽器客戶端中執行。但這兩種腳本技術經常一起使用。服務器端或者客戶端腳本的替代方法是讓Web服務器本身提供靜態網頁。
服務器端腳本通常用於為用戶提供定製的界面。這些腳本可以組裝客戶端特徵,以便根據這些特徵、用戶的要求、訪問權限等定製響應。服務器端腳本還使網站所有者能夠隱藏生成界面的源代碼,而對於客戶端側面腳本,用戶可以訪問客戶端收到的所有代碼。使用服務器端腳本的一個缺點是客戶端需要通過網絡向服務器發出進一步的請求,以便通過Web瀏覽器向用戶顯示新信息。這些請求可能會降低用戶體驗,給服務器帶來更多負載,並在用戶與服務器斷開連接時阻止應用程序的使用。
當服務器以常用方式(例如,根據HTTP或FTP協議)提供數據時,用戶可以選擇多個客戶端程序(大多數現代Web瀏覽器可以使用這兩種協議請求和接收數據)。對於更專業的應用程序,程序員可以編寫自己的服務器、客戶端和通信協議,這些協議只能彼此使用。
在用戶本地計算機上運行而不通過網絡發送或接收數據的程序不被視為客戶端,因此此類程序的操作不會被視為客戶端操作。
歷史
[編輯]Netscape通過Netscape Enterprise Server引入了用於服務器端腳本編寫的JavaScript實現,於1994年12月首次發布(在發布用於瀏覽器的 JavaScript後不久)。[1][2]
1995年初Fred Dufresne為馬薩諸塞州波士頓電視台(WCVB)開發第一個網站時使用了服務器端腳本。美國專利5835712 (頁面存檔備份,存於網際網路檔案館)中描述了該技術。該專利於1998年頒發,現歸開放發明網絡(OIN)所有。2010年,OIN因其在服務器端腳本方面的工作而將Fred DuFresne授予「"傑出發明家"」稱號。
解釋
[編輯]在Web的早期,服務器端腳本幾乎完全是通過使用C程序、Perl腳本和使用通用網關接口(CGI)的shell腳本的組合來執行的。這些腳本由操作系統執行,由網絡服務器返回結果。許多現代Web服務器可以通過Web服務器本身或通過Web服務器的擴展模塊(例如mod_perl或mod_php)直接執行在線腳本語言,例如ASP、JSP、Perl、PHP和Ruby。例如,WebDNA包含其自己的嵌入式數據庫系統。兩種形式的腳本(即CGI或直接執行)都可用於構建複雜的多頁面站點,但直接執行通常會產生較少的開銷,因為對外部解釋器的調用次數較少。
動態網站有時會使用自定義Web應用程序服務器,例如GlassFish、Perl/Plack和Python的「Base HTTP Server」庫,儘管有些人可能不認為這是服務器端腳本。當使用基於Web的動態腳本技術時,開發人員必須對客戶端和服務器之間的邏輯、時間和物理分離有敏銳的理解。例如,對於觸發服務器端代碼執行的用戶操作,使用經典ASP的開發人員必須顯式地使用戶的瀏覽器向Web服務器發出返回請求。
服務器端腳本完全由服務器而不是客戶端處理。當客戶端請求包含服務器端腳本的頁面時,應用程序服務器處理腳本並將HTML頁面返回給客戶端。
服務端渲染
[編輯]在網絡誕生之初,內容純粹是在後端生成的。在前端單頁應用程序被廣泛採用之後,引入了一種新方法來使用客戶端應用程序但在後端生成HTML。使用服務端渲染(SSR)的網頁框架包括:Next.js、Nuxt.js和Nest.js。他們分別使用React.js、Vue.js和Angular來生成服務器的內容。
服務器端生成
[編輯]另一種與服務端渲染 類似的網站內容生成技術是使用服務器端生成(SSG)。該技術使用創建靜態html頁面的應用程序,然後將這些文件發送到服務器。文件生成可以發生在完全不同的計算機上,例如使用持續交付。SSG工具的示例有Jekyll、Gatsby或Eleventy。這些網站通常託管在Netlify或GitHub頁面上。GitHub還支持Jekyll項目,當更改添加到git時,它會自動構建網站。
編程語言
[編輯]- ActiveVFP (*.avfp)
- ASP (*.asp)
- ASP.NET Web Forms (*.aspx)
- ASP.NET Web Pages (*.cshtml, *.vbhtml)
- ColdFusion標記語言 (*.cfm)
- Go (*.go)
- Google Apps Script (*.gs)
- Hack (*.php)
- Haskell (*.hs) (例如: Yesod)
- Java (*.jsp, *.do) 用於 JavaServer Pages
- JavaScript 用於Server-side JavaScript (*.ssjs, *.js) (例如: Node.js)
- Lasso (*.lasso)
- Lua (*.lp *.op *.lua)
- Parser編程語言 (*.p)
- Perl via the CGI.pm module (*.cgi, *.ipl, *.pl)
- PHP (*.php, *.php3, *.php4, *.phtml)
- Python (*.py) (例如: Pyramid, Flask, Django)
- R (*.rhtml)
- Ruby (*.rb, *.rbw) (例如: Ruby on Rails)
- Tcl (*.tcl)
- WebDNA (*.dna,*.tpl)
- Progress WebSpeed (*.r,*.w)
參見
[編輯]- 客戶端腳本
- 內容管理系統 (CMS)
- Edge Side Includes
- JSP
- Node.js
- Next.js
- Outline of web design and web development
- Perl/Plack
- PHP
- 服務器端內嵌 (SSI)
- 網頁程式設計
參考文獻
[編輯]- ^ Server-Side JavaScript Guide. Netscape Communications Corporation. 1998 [2012-04-25]. (原始內容存檔於2023-05-21).
- ^ Mike Morgan. Using Netscape™ LiveWire™, Special Edition. Que. 1996 [2023-08-23]. (原始內容存檔於2012-12-21).