Проблема с CORS для AngularJS и Silex (Apache)

Я пытаюсь настроить CORS, но я не знаю, чего мне не хватает.
Я использую Silex (PHP — Apache) в качестве бэкенда и AngularJS в качестве внешнего интерфейса.
У меня есть эта конфигурация в .htaccess:

Header always set Access-Control-Allow-Origin "*"Header always set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE"Header always set Access-Control-Allow-Credentials "true"Header always set Access-Control-Allow-Headers "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-HTTP-Method-Override, Origin"
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]]

В конфигурации приложения для angularJS у меня есть:

myApp.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);

Мой сервис в angularJS выглядит так:

var headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, PUT, OPTIONS, PATCH, DELETE',
'Access-Control-Allow-Headers': 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-HTTP-Method-Override, Origin'
};
var restConfig = {
method: 'POST',
dataType : 'json',
url: 'http://localapi.com/user/create',
data: paramData,
headers: headers
};
return $http(restConfig)
.success(function (a) {
console.log('works');
}).error(function (m) {
console.log('does not work');
});

И все, что я могу видеть в сети для этого вызова,

create | OPTION | (failed)
/user  |        | net::ERR_EMPTY_RESPONSE

В то время как с curl я получаю этот ответ

curl -I http://localapi.com/user/create

HTTP/1.1 200 OK
Date: Tue, 17 Feb 2015 01:46:06 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.24 mod_ssl/2.2.26 OpenSSL/0.9.8y
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS, PATCH, DELETE
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-HTTP-Method-Override, Origin
X-Powered-By: PHP/5.4.24
Cache-Control: no-cache
Content-Type: application/json

И я не знаю, чего мне не хватает. Я использую angular в nodeJS в порту 5000. Может кто-нибудь дать мне совет, чтобы это исправить?

2

Решение

Эти заголовки работают только на сервере, поэтому нет необходимости устанавливать их в угловых:

var headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, PUT, OPTIONS, PATCH, DELETE',
'Access-Control-Allow-Headers': 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-HTTP-Method-Override, Origin'
};

В угловых вы должны установить что-то вроде:

headers: {
'Content-Type': 'application/json; charset=UTF-8',
'Accept': 'application/json, */*; q=0.01',
'X-CSRFToken': undefined
},

Вот как установить токен csrf:
AngularJS + Django Rest Framework + CORS (файл cookie CSRF не отображается в клиенте)

Также с помощью инструментов разработчика вашего веб-браузера вы можете точно узнать, как был отправлен ваш запрос.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector