【发布时间】:2013-03-16 11:42:20
【问题描述】:
我想构建一个前端(静态)和后端(API)的网络应用程序,除了共享同一个域,完全分离。通常我会认为这没有问题,但我有一些特殊要求:
- API 在 Heroku 上运行(使用 Django 和 TastyPie)
- 所有静态内容,包括 html 文件都将托管在 Amazon S3
前端应用程序将是一个单页 Javascript 应用程序(带有一个基本模板,我们称之为 index.html)并通过 AJAX 从 API 填充内容。由于我还不想为 API 实现 CORS,并且希望遵循同源策略,因此我希望 API 和 S3(存储桶)上的文件以某种方式共享同一个域。我也不想使用 Django 的平面应用程序或通过 Django 渲染index.html。
我扫描了 Google 和 stackoverflow,但到目前为止找不到合适的解决方案。据我阅读天真的方式(以某种方式将域指向 Heroku 应用程序和 S3 存储桶)是不可能的。我想到了一些解决方案,但没有找到以下来源:
- 如果可能,将域名指向 Heroku 和 S3 存储桶上的 API
- 将一些选项传递给 Heroku 以呈现托管在 S3(ProcFile?)上的 html,使用 Django 和 S3 库来获取其他静态资产
- 也许可以使用 boto 来实现这一目标
- 其他完全不同的建议?
之前有没有人尝试过这样的事情并且可以为我指明正确的方向?
一个补充:稍后我想使用一些lile PhantomJS 来使单页应用程序可抓取。理想情况下,爬虫的此输出也应托管在 S3 存储中。
【问题讨论】:
-
子域呢? bucket.domain.tld -> 您的 S3 存储桶。 domain.tld -> Heroku。还是这违反了同源政策?
-
Same Origin Policy 恐怕也适用于子域。我想我现在正在考虑使用某种 CORS 实现。
-
您可以将 JSONP 用于很多事情。过去我已经能够将它与跨域一起使用。
-
谢谢,但 JSONP 也不是一个真正可行的选择。它有一些安全问题,只支持 GET 请求。
标签: django heroku amazon-s3 single-page-application static-files