伺服器端指令碼
伺服器端指令碼是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).