1

我有一个 AngularJS WebAPI 应用程序,它有一个 Javascript 前端。前端调用后端 WebAPI 获取数据。将来很可能会有不止一个前端调用后端。

我想将此应用程序更改为使用 HTTPS,并且正在研究如何最好地构建它。我看到它的方式有两种(也许更多)。

(1) 在一个(或多个)Web 角色上托管 WebAPI C# 应用程序、index.html、Javascript、Javascript 库和其他 HTML。

(2) 在 CDN 上托管 index.html、Javascript、Javascript 库和其他 HTML,并将 WebAPI C# 应用程序放在一个(或多个)Web 角色上的一个位置。

从性能的角度来看,当我使用 SSL 时,拆分解决方案 (2) 可能存在任何问题。有什么我应该考虑的可能有助于缩短启动时间(我的目标是尽可能快)。

我还有一个问题。如果我要使用 Azure CDN,那么我是否仍然可以将我的网站索引寻址为 www.mywebsite.com,如果使用 HTTPS,我是否需要 SSL 证书?

4

1 回答 1

2

选项 2 更可取。

您必须考虑,您的应用程序位于后端。前端只是一组建议的 UI 控件和交互,用于使用您拥有的应用程序。然后,如果您可以单独托管它们,您将获得一些好处,首先是不创建 UI 依赖项。

这种方法就像创建一个瘦客户端

由于应用程序是基于 AngularJS 的,可能所有的 UI 都是带有 HTML、CSS 和 Javascript 的静态文件。您可以将它们托管在 BLOB 存储中,并通过 CDN 对其进行扩展。您可以有一个指向 Azure Blob 存储的自定义域名,例如“www.yourdomain.com”。它有很多好处,包括比 Web 角色更好的价格和扩展性。撇开这一点,无论您是否获得点击,您都需要为网络角色付费。唯一的缺点是,据我所知,无法使用 HTTPS,但这应该不是问题,因为您只是托管包含占位符的静态内容和模板,没有实际数据。

在 Blob 存储上,您可以附加自己的缓存控制标头,允许浏览器在本地缓存这些文件。然后用户将下载这些文件一次,并在下一次从浏览器缓存中恢复。此外,您可以将已经压缩的内容存储在 GZIP 中,然后设置内容编码属性,让浏览器知道它是压缩的,从而实现更快的内容下载。不要忘记你应该捆绑你的资源。例如,您应该将所有 JS 代码捆绑在一个 JS 文件中,将所有 CSS 代码捆绑在一个 CSS 文件中,并且所有 AngularJS 视图都应该捆绑在该template.js文件中(也应捆绑在唯一的 JS 文件中)。

不过,您需要在工作人员/网络角色实例中托管您的后端应用程序。这里可以使用HTTPS,通过HTTPS使用AJAX也没问题,虽然页面加载在HTTP上,只要SSL/TLS证书是由浏览器认可的CA签名的(即:有效证书)。如果您使用自签名证书,浏览器将无法提示用户接受它。如果您打算从自签名开始,请记住这一点。

因此,您将在 blob 存储中拥有所有不依赖于用户/状态的东西,即便宜、快速且高度可扩展;并且您的所有用户数据交互都将通过您的工作人员/网络角色通过可能在 JSON 中的紧凑数据请求/响应发生。因此,您需要更少的网络/工作者角色来提供相同级别的服务。

现在,如果您有非常不对称的大量查询和数据更改请求,您应该考虑使用像CQRS这样的方法。

于 2014-12-03T12:38:02.947 回答