【问题标题】:Loading html partials from different domain in angularjs在angularjs中从不同域加载html部分
【发布时间】:2014-01-17 18:49:33
【问题描述】:

我希望能够从 amazon s3 加载 html 部分,所以我上传它们并像这样使用公共 url;

'use strict';

/* App Module */

var phonecatApp = angular.module('phonecatApp', [
  'ngRoute',
  'phonecatAnimations',

  'phonecatControllers',
  'phonecatFilters',
  'phonecatServices'
]);

phonecatApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/phones', {
        templateUrl: 'https://s3-us-west-2.amazonaws.com/playfield/phone-list.html',
        controller: 'PhoneListCtrl'
      }).
      when('/phones/:phoneId', {
        templateUrl: 'https://s3-us-west-2.amazonaws.com/playfield/phone-detail.html',
        controller: 'PhoneDetailCtrl'
      }).
      otherwise({
        redirectTo: '/phones'
      });
  }]);

但我收到这样的错误

 [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy.

当我像这样从类似的域切换到部分时;

templateUrl: '/partials/phone-list.html'

效果很好。

我很乐意提供任何帮助。 谢谢

【问题讨论】:

标签: javascript angularjs cors


【解决方案1】:

另一种方法是在您的服务器端解决问题,该问题不受 CORS 约束。您编写了一个小型代理服务,该服务根据 URL 将请求转发到其他预定义的服务器。

因此,例如,任何定向到 /playfield/ 的请求都将使用特定协议(http 或 https)重定向到特定主机,例如 s3-us-west-2.amazonaws.com。

请求返回的内容就是您返回给客户的内容。

这样您现在可以安全地从您自己的服务器获取所有内容,并且您的客户端请求将不受 CORS 的约束。

【讨论】:

  • 感谢您的回答,我认为这样的设置可能会有延迟,您会在生产系统中推荐这样的设置吗?
  • @elimence 我所在的公司将在多个生产系统中使用这种方法,使用 node.js 服务器作为代理。我知道其他同事在他们的系统中也这样做。主要是因为除了避免 CORS 之外,它还有其他优势,比如现在您的服务器可以控制安全性。您不想让您的客户控制什么是可访问的,什么是不可访问的。当然,代理意味着一个额外的步骤,这会增加一些延迟,但如果您的服务器上有良好的宽带和良好的资源,这可能可以忽略不计。
  • 我很好奇,您能否告诉我您是否有任何特殊原因不将文件托管在主服务器上并从那里请求它们?谢谢
猜你喜欢
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多