【问题标题】:Serving Django API on Heroku and single-page app on Amazon S3 on the same domainHeroku 上的 Django API 和同一域上 Amazon S3 上的单页应用程序
【发布时间】: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


【解决方案1】:

这对于您当前的堆栈不可能

您的 Heroku 应用程序和您的 S3 存储桶实际上是通过两个不同的域提供服务的。拥有两个不同域的好处是您可以从所有静态资产请求中卸载您的服务器。

实现您想要的一种复杂方式是通过一个唯一域适当地代理请求。幸运的是,Heroku 和 Amazon 都不会让你这样做:

  • Nginx 可以将 static 文件夹代理到 your-api.herokuapp.comyou cannot configure nginx on Heroku,这将破坏首先使用 PaaS 的目的。
  • S3 can host your website 并将api 文件夹重定向到your-api.herokuapp.com,但仅限于不能解决CORS 问题的301 重定向。如果您好奇,请尝试一下:

    <RoutingRules>
      <RoutingRule>
        <Condition>
          <KeyPrefixEquals>api/</KeyPrefixEquals>
        </Condition>
        <Redirect>
          <HostName>your-api.herokuapp.com</HostName>
        </Redirect>
      </RoutingRule>
    </RoutingRules>
    

此时,简单的解决方案是实现a Django middleware for cross-domain sharing

【讨论】:

  • 感谢您的回复。到目前为止,我的方法已经有所改变,我不需要再应用上述方法了。
猜你喜欢
  • 2012-07-18
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多