【问题标题】:Hosting WebAPI on a HTTPS Azure Web Role and HTML Javascript on HTTPS Azure CDNs?在 HTTPS Azure Web 角色上托管 WebAPI,在 HTTPS Azure CDN 上托管 HTML Javascript?
【发布时间】:2015-01-27 03:37:08
【问题描述】:

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

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

(1) 在一个(或多个)网络角色上托管 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 证书?

【问题讨论】:

    标签: http azure ssl https azure-cdn


    【解决方案1】:

    选项 2 更可取。

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

    这种方法就像创建一个thin client

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

    在 Blob 存储上,您可以attach your own cache control headers,允许浏览器在本地缓存这些文件。然后用户将下载这些文件一次,并在下一次从浏览器缓存中恢复。此外,您可以将已压缩的内容存储在 GZIP 中,然后将其存储在 set the content encoding property to let the browser know it is compressed 中,从而实现更快的内容下载。不要忘记你应该捆绑你的资源。例如,您应该将所有 JS 代码捆绑在一个 JS 文件中,将所有 CSS 代码捆绑在一个 CSS 文件中,并且将所有 AngularJS 视图捆绑在 template.js 文件中(也捆绑在唯一的 JS 文件中)。

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

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

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

    【讨论】:

    • @vrtortola - 非常感谢您的回答。只是一个小问题。您提到“您可以拥有一个指向 Azure Blob 存储的自定义域名,例如 `www.yourdomain.com。”您是否知道我是否可以默认使用 CNAME 映射将其指向 www.yourdomain.com/index.html?
    • 我不敢相信,Windows Azure 不支持它:stackoverflow.com/questions/8639484/…
    • 但好消息......它在 Amazon S3 中受支持:docs.aws.amazon.com/AmazonS3/latest/dev/…
    • 因此,可以使用 Azure 作为辅助角色,使用 Amazon S3 作为存储。我绝对推荐 Amazon S3 而不是 Azure Blob,它有更多的特性和功能。当我发现没有合理的方式阻止热链接(SAS 不合理)时,我不再推荐 Azure Blob。
    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2012-10-05
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多