最近我一直在使用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)