网络应用程序

<image>

网络应用程序（web application，英文简称 Webapp）分为客户端到服务器架构或无服务器后端架构。其中的客户端就是网页浏览器。常见的网页应用程序有Webmail、网络购物、网络拍卖、wiki、网络论坛、网志、网络游戏等诸多应用。

网络应用程序风行的原因之一，是因为可以直接在各种电脑平台上执行，不需要事先安装或定期升级等程序。

## 定义及类似术语

各种类型的动态网页和“网络应用程序” 之间的区别一般是不清楚的。最有可能接近“网络应用程序”的网站是与桌面软件应用程序或移动应用程序具有类似功能的网站。HTML5引入了明确的支持，使得应用程序可以作为网页加载，可以在本地存储数据并在脱机状态下继续运行。

单页应用更类似于应用程序，因为它们没有使用不同的URL切换操作界面。像 Sencha Touch 和 AngularJS 这样的单页网页框架可能会被用来为移动平台开发这样的网页应用。

### 移动web应用程序

在制作Web应用程序时，有几种定位移动设备的方法：

- 响应式网页设计可用于制作网络应用程序 - 无论是传统网站还是单页应用程序，都可以在小屏幕上查看，并且可以很好地与触摸屏配合使用。
- 渐进式网页应用程序是常规网页或网站和移动应用程序的混合体。
- 原生应用程序或“移动应用程序”直接在移动设备上运行，就像常规软件应用程序直接在台式计算机上运行一样，而无需Web浏览器（并且可能不需要Internet连接）; 这些通常是用Java（Android设备）或Objective C或Swift（用于iOS设备）编写的。最近，像React Native，Flutter和Xamarin这样的框架允许使用不同于每种标准本地语言的语言来开发所有平台的本地应用程序。
- 混合应用程序在本地应用程序中嵌入移动网站，可能使用混合框架（如 Apache Cordova 和 Ionic 或 Appcelerator Titanium）。这允许使用网络技术进行开发（并且可能直接复制来自现有移动网站的代码），同时还保留原生应用的某些优点（例如，直接访问设备硬件，离线操作，应用商店可见性）。

## 历史

在较早的网络架构（如客户机 - 服务器）中，应用程序的处理负载在服务器上的代码和本地安装在每个客户机上的代码之间共享。换句话说，一个应用程序有自己的预编译客户端程序作为其用户界面，必须分别安装在每个用户的个人电脑上。升级到应用程序的服务器端代码通常还需要升级到安装在每个用户工作站上的客户端代码，这增加了技术支持成本并降低了生产力。此外，应用程序的客户端和服务器组件通常都与特定的计算机系统结构紧密相连，操作系统并将它们移植到其他操作系统对于除了最大的应用程序之外的所有操作系统而言都是非常昂贵的 （现在，用于移动设备的本地应用程序也受到一些或所有上述问题的困扰。）

相反，网页应用程序使用由各种网页浏览器支持的标准格式（如HTML和JavaScript）编写的网页。网页应用程序可被视为客户端 - 服务器软件的特定变体，其中客户端软件在使用诸如HTTP的标准程序访问相关网页时被下载到客户端机器。每次访问网页时都可能会发生客户端网页软件更新。在会话期间，网页浏览器解释并显示页面，并作为任何网页应用程序的通用客户端。

在万维网的早期，每个单独的网页作为一个静态文档被传送到客户端，但是由于用户输入是通过嵌入在页面标记中的网页的元素返回的，所以页面的顺序仍然可以提供交互式的体验。但是，每次对网页的重大更改都需要往返服务器以刷新整个页面。

1995年，网景引入了一种称为JavaScript的客户端脚本语言，允许程序员在客户端运行的用户界面中添加一些动态元素。因此，为了生成整个网页而不是将数据发送到服务器，下载页面的嵌入脚本可以执行各种任务，例如输入验证或显示/隐藏页面的一部分。

1996年，Macromedia引入了Flash，这是一种矢量动画播放器，可以作为插件添加到浏览器中，以在网页上嵌入动画。它允许使用脚本语言来编程客户端的交互，而不需要与服务器通信。

在1999年，“Web应用程序”概念在Servlet Specification 2.2版中以Java语言引入。2.1？当时JavaScript和XML已经被开发出来，但Ajax还没有被创造出来，并且XMLHttpRequest对象在2008年才作为ActiveX对象在Internet Explorer 5上引入。

2005年，Ajax这个词被创造出来，像Gmail这样的应用程序开始使他们的客户端越来越灵活。网页脚本能够联系服务器来存储/检索数据，而无需下载整个网页。

在2011年，HTML5被定稿，提供图形和多媒体功能，而不需要客户端插件。HTML5也丰富了文档的语义内容。API和文档对象模型（DOM）不再是事后的，而是HTML5规范的基础部分。WebGL API为基于HTML5的canvas和JavaScript语言的高级3D图形铺平了道路。这些在创造真正的平台和浏览器独立显著重要性的丰富互联网应用程序。

## 界面

通过DHTML、Java Applet、JavaFX、JavaScript、Flash、Silverlight等技术，屏幕上的绘图，播放音频以及访问键盘和鼠标等应用程序特有的方法都是可能的。许多服务已经将所有这些组合到了一个更熟悉的界面中，该界面采用了操作系统的外观。通用技术，如拖放也受到这些技术的支持。Web开发人员通常使用客户端脚本来添加功能，特别是创建不需要重新加载页面的交互式体验。一些技术来协调客户端脚本和服务器端技术，如ASP.NET、Java EE、Perl / Plack和PHP。

使用各种技术组合的网页开发技术AJAX是创造更多交互式体验的技术示例。

## 结构

应用程序通常被分成称为“层”的逻辑块，其中每个层被分配一个角色。传统的应用程序只包含一层，它驻留在客户端机器上，但是网页应用程序本身就是一种n层的方法。尽管可能有许多变化，但最常见的结构是三层应用程序。按照最常见的形式，这三个层次按顺序被称为呈现，应用和存储。网页浏览器是第一层（呈现），引擎使用一些动态的网页内容技术（如ASP，CGI，ColdFusion，Dart，JSP / Java，Node.js，PHP，Python或Ruby on Rails）是中间层（应用程序逻辑），数据库是第三层（存储）。Web浏览器发送请求到中间层，它通过使查询和更新对数据库服务他们，并生成用户界面。

对于更复杂的应用程序，三层解决方案可能不足，使用n层方法可能会有所帮助，其中最大的好处是将驻留在应用程序层上的业务逻辑划分为更细粒度模型。另一个好处是可以通过提供易于使用的界面来访问数据，添加一个集成层，将数据层与其他层分开。例如，客户端的数据将被通过调用一个 "list_clients" 函数，而不是直接使一个SQL查询针对数据库上的客户端表访问。这样可以替换底层的数据库，而不会对其他层进行任何更改。

有一些人将Web应用程序视为两层架构。这可以是一个“聪明”的客户端，执行所有的工作，并查询一个“愚蠢的”服务器，或一个“愚蠢的”客户端，依靠一个“聪明的”服务器。客户端将处理表示层，服务器将具有数据库（存储层），业务逻辑（应用层）将在其中一个或两个上。虽然这增加了应用程序的可伸缩性，并将显示和数据库分开，但它仍然不允许真正的图层专业化，所以大多数应用程序将超过这个模型。

## 商业用途

应用软件公司正在形成的战略是提供对以前作为本地应用程序分发的软件的网络访问。根据应用程序的类型，可能需要开发一个完全不同的基于浏览器的界面，或者仅仅调整现有的应用程序以使用不同的演示技术。这些程序允许用户每月或每年支付使用软件应用程序的费用，而无需将其安装在本地硬盘驱动器上。遵循这一战略的公司被称为应用服务提供商（ASP），而ASP在软件行业中正受到越来越多的关注。

这类应用程序的安全漏洞是一个主要问题，因为它可能涉及企业信息和私人客户数据。保护这些资产是任何Web应用程序的重要组成部分，并且在开发过程中必须包含一些关键的操作区域。这包括认证，授权，资产处理，输入以及记录和审计的过程。从一开始就将安全性构建到应用程序中，从长远来看可能会更有效，而且破坏性更小。

云计算模型Web应用程序是软件即服务（SaaS）。有企业应用程序作为SaaS为企业提供固定或使用相关费用。其他Web应用程序是免费提供的，通常从Web应用程序界面中显示的广告中产生收入。

## 开发

编写一个Web应用程序经常使用开源软件简化，如Django、Ruby on Rails或Symfony称为Web应用框架。这些框架有助于快速应用程序开发，让开发团队专注于其应用程序的独特部分，而无需解决诸如用户管理等常见的开发问题。

使用Web应用程序框架通常可以减少程序中的错误数量，通过简化代码，并允许一个团队专注于框架，而另一个专注于实现功能。在因特网上经常发生黑客攻击的应用程序中，与安全相关的问题可能由程序错误引起。框架还可以促进使用最佳实践，例如Post/Redirect/Get。

此外，上的应用程序也有发展的潜力，尽管目前没有太多可行的平台适合这种模式。