服务器端脚本

服务器端脚本是Web开发中使用的一种技术，涉及在Web服务器上使用脚本，该脚本为每个用户（客户端）对网站的请求生成定制的响应。脚本可以用任何可用的服务器端脚本语言编写。服务器端脚本与客户端脚本不同，客户端脚本（例如JavaScript）嵌入到Web浏览器客户端中执行。但这两种脚本技术经常一起使用。服务器端或者客户端脚本的替代方法是让Web服务器本身提供静态网页。 服务器端脚本通常用于为用户提供定制的界面。这些脚本可以组装客户端特征，以便根据这些特征、用户的要求、访问权限等定制响应。服务器端脚本还使网站所有者能够隐藏生成界面的源代码，而对于客户端侧面脚本，用户可以访问客户端收到的所有代码。使用服务器端脚本的一个缺点是客户端需要通过网络向服务器发出进一步的请求，以便通过Web浏览器向用户显示新信息。这些请求可能会降低用户体验，给服务器带来更多负载，并在用户与服务器断开连接时阻止应用程序的使用。 当服务器以常用方式（例如，根据HTTP或FTP协议）提供数据时，用户可以选择多个客户端程序（大多数现代Web浏览器可以使用这两种协议请求和接收数据）。对于更专业的应用程序，程序员可以编写自己的服务器、客户端和通信协议，这些协议只能彼此使用。 在用户本地计算机上运行而不通过网络发送或接收数据的程序不被视为客户端，因此此类程序的操作不会被视为客户端操作。 Netscape通过Netscape Enterprise Server（英语：Netscape Enterprise Server）引入了用于服务器端脚本编写的JavaScript实现，于1994年12月首次发布（在发布用于浏览器的 JavaScript后不久）。 1995年初Fred Dufresne（英语：Fred Dufresne）为马萨诸塞州波士顿电视台(WCVB)（英语：WCVB-TV）开发第一个网站时使用了服务器端脚本。美国专利5835712 （页面存档备份，存于互联网档案馆）中描述了该技术。该专利于1998年颁发，现归开放发明网络（英语：Open Invention Network）(OIN)所有。2010年，OIN因其在服务器端脚本方面的工作而将Fred DuFresne授予“"杰出发明家"”称号。 在Web的早期，服务器端脚本几乎完全是通过使用C程序、Perl脚本和使用通用网关接口(CGI)的shell脚本的组合来执行的。这些脚本由操作系统执行，由网络服务器返回结果。许多现代Web服务器可以通过Web服务器本身或通过Web服务器的扩展模块（例如mod_perl（英语：mod_perl）或mod_php（英语：mod_php））直接执行在线脚本语言，例如ASP、JSP、Perl、PHP和Ruby。例如，WebDNA包含其自己的嵌入式数据库系统。两种形式的脚本（即CGI或直接执行）都可用于构建复杂的多页面站点，但直接执行通常会产生较少的开销，因为对外部解释器的调用次数较少。 动态网站有时会使用自定义Web应用程序服务器，例如GlassFish、Perl/Plack（英语：Plack (software)）和Python的“Base HTTP Server”库，尽管有些人可能不认为这是服务器端脚本。当使用基于Web的动态脚本技术时，开发人员必须对客户端和服务器之间的逻辑、时间和物理分离有敏锐的理解。例如，对于触发服务器端代码执行的用户操作，使用经典ASP的开发人员必须显式地使用户的浏览器向Web服务器发出返回请求。 服务器端脚本完全由服务器而不是客户端处理。当客户端请求包含服务器端脚本的页面时，应用程序服务器处理脚本并将HTML页面返回给客户端。 在网络诞生之初，内容纯粹是在后端生成的。在前端单页应用程序被广泛采用之后，引入了一种新方法来使用客户端应用程序但在后端生成HTML。使用服务端渲染（SSR）的网页框架包括：Next.js、Nuxt.js和Nest.js（英语：Nest.js）。他们分别使用React.js、Vue.js和Angular来生成服务器的内容。 另一种与服务端渲染 类似的网站内容生成技术是使用服务器端生成(SSG)。该技术使用创建静态html页面的应用程序，然后将这些文件发送到服务器。文件生成可以发生在完全不同的计算机上，例如使用持續交付。SSG工具的示例有Jekyll、Gatsby或Eleventy。这些网站通常托管在Netlify（英语：Netlify）或GitHub页面上。GitHub还支持Jekyll项目，当更改添加到git时，它会自动构建网站。 ActiveVFP（英语：ActiveVFP） (*.avfp) ASP (*.asp) ASP.NET Web Forms（英语：ASP.NET Web Forms） (*.aspx) ASP.NET Web Pages (*.cshtml, *.vbhtml) ColdFusion标记语言（英语：ColdFusion Markup Language） (*.cfm) Go (*.go) Google Apps Script（英语：Google Apps Script） (*.gs) Hack (*.php) Haskell (*.hs) (例如： Yesod（英语：Yesod (web framework)）) Java (*.jsp, *.do) 用于 JavaServer Pages JavaScript 用于Server-side JavaScript（英语：Server-side JavaScript） (*.ssjs, *.js) (例如： Node.js) Lasso（英语：Lasso (programming language)） (*.lasso) Lua (*.lp *.op *.lua) Parser编程语言（英语：Parser (programming language)） (*.p) Perl via the CGI.pm（英语：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（英语：OpenEdge Advanced Business Language） (*.r,*.w) 客户端脚本 内容管理系统 (CMS) Edge Side Includes（英语：Edge Side Includes） JSP Node.js Next.js Outline of web design and web development（英语：Outline of web design and web development） Perl/Plack（英语：Plack (software)） 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）.  維基學院中的相關研究或學習資源：服务器端脚本 开放目录项目中的“服务器端脚本”;