Angularjs CORS调用Heroku,为OPTION请求提供411(需要长度)错误

时间:2013-02-07 19:59:10

标签: heroku angularjs cors

最近我一直在使用Angular和$ resource为REST API创建客户端。这是一个简单的例子。

resources.factory('Type', ['$resource', '$http', function($resource, $http) {

  return = $resource(
    'http://api.lelylan.com/types/:id',
    { id: '@id' },
    { update: { method: 'PUT' } });
}]);

在本地和测试套件中,一切都很好,但是在向Heroku(云应用程序平台)上运行的API发出请求时遇到了问题。 URI(您可以通过将其放在浏览器上进行检查)是this [1]。

<h1>Client HTTP request</h1>
   <div ng-controller="TypeController">
  <div>Type name is {{type.name}}</div>
</div>
</hr>

<script>
  function TypeController($scope, Type) {
    $scope.type = Type.get({ id: '50ffa785a90db269f2000002' });
  }
</script>

问题在于使用CORS,当Chrome(实际上所有基于webkit的浏览器)发出OPTION请求时,浏览器不会为其设置Content-Length。基于Nginx(HTTP和反向代理服务器)的Heroku在未设置内容长度时总是返回411(需要长度)错误。

我还尝试通过将Header设置为请求的公共标头来强制它,但JS出于安全原因不允许设置此标头。我被卡住了。你能给我一些暗示吗?

非常感谢。

[1] http://api.lelylan.com/types/50ffa785a90db269f2000002

更新1

Here您可以看到我从Heroku日志中收到的消息。我正在使用Stack cedar和Ruby / Rails作为框架。从浏览器中我得到了这个错误。

OPTIONS http://api.lelylan.com/devices/50c61ff1d033a9b610000001 411 (Length Required)

0 个答案:

没有答案