Angular: пользовательские заголовки игнорируются $ http и $ resource. Зачем?

пытаюсь получить доступ к REST-сервисут контроль. Первая проблема заключается в том, что сервис неt включает заголовок Access-Control-Allow-Origin, что является проблемой, которая, если я правильно понимаю, немедленно ограничивает меня JSONP.

Кроме того, по умолчанию этот сервис отправляет XML, а не JSON, хотяспособен отправлять JSON. Я думаю, что он должен отвечать на мой заголовок Accept, люди, ответственные за сервис, говорят, что он смотрит на мой Content-Type. Это означало бы, что ямне нужно сделать POST, а не GET (хотя получить больше смысла, когда яЯ просто получаю некоторые статические данные, верно?).

Упрямый, как я, япробую мой заголовок Accept первым. Так как Angular принимает только JSON, яЯ ожидаю, что это будет использоватьAccept: application/json заголовок по умолчанию, но это не такт, и он игнорирует мои попытки установить его вручную:

app.config(['$httpProvider', function($httpProvider){
    console.log($httpProvider.defaults.headers.common);
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
    $httpProvider.defaults.headers.post['Accept'] = 'application/json, text/javascript';
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8';
    $httpProvider.defaults.headers.post['Access-Control-Max-Age'] = '1728000';
    $httpProvider.defaults.headers.common['Access-Control-Max-Age'] = '1728000';
    $httpProvider.defaults.headers.common['Accept'] = 'application/json, text/javascript';
    $httpProvider.defaults.headers.common['Content-Type'] = 'application/json; charset=utf-8';
    $httpProvider.defaults.useXDomain = true;
}]);

Я делаю это снова в фактическом ресурсе:

return $resource('http://foo.com/getStuff', {}, {
    fetch: {
        method:'JSONP',
        params: params,
        headers: {
            'Accept':'application/json, text/javascript',
            'Content-Type':'application/json; charset=utf-8'
        },
        isArray:false,
        callback: 'JSON_CALLBACK'
    }
});

Но все же заголовки запроса содержат.Accept: */*

Мой вопрос: ПОЧЕМУ? Почему Angular игнорирует мои заголовки? И как мне заставить его использовать правильные заголовки в любом случае?

А также: есть ли способ использовать JSONP в POST?

Редактировать: Первоначально я использовал Angular 1.0.7, но я просто попробовал его с 1.2.3 и получил те же результаты. Заголовки игнорируются, но все утверждают, что это способ сделать это.

Я также попытался сделать это напрямую с $ http, а не с $ resource, с теми же результатами.

Изменить 2: Вот'сJSFiddle, Это'анонимный и не делаетт мой реальный сервер, но используя Firebug / инструменты разработчика, вы можете проверить, что он отправляетAccept: */* на оба звонка, несмотря на мои многочисленные попытки установитьapplication/json заголовки. И это моя настоящая проблема здесь. На моем реальном сервере яя получаю результат XML из-за этого, несмотря на мой настоящий серверВозможность отправки JSON.

(Поддерживает ли настоящий сервер jsonp на данный момент менее актуально. Этот фиктивный сервер явно нет, но этохорошо Я просто забочусь о заголовках.)

Редактировать 3: яМы испробовали оба решения, предложенные ниже:

$http.defaults.headers.common['Accept'] = 'application/json, text/javascript';

$http.defaults.transformRequest.push(function (data, headersGetter) {
    headersGetter().Accept = "application/json, text/javascript";
    return data;
});

Мы попробовали оба утверждения отдельно. В контроллере, а затем в сервисе непосредственно перед вызовом http. Все еще нет работа.

Может кто-нибудь дать мне JsFiddle, где это работает?

Изменить 4: Я заметил, что когда я использую GET, а не JSONP, заголовок Accept является правильным. Но тогда ответ отклонен, потому что это нене иметь правильный заголовок.

Какие заголовки должен иметь вызов JSONP? Потому что там'в вызове JSONP гораздо больше заголовков, но ничего, что бы идентифицировало его как JSONP. Должен ли сервер иметь явную поддержку JSONP, чтобы это работало? Я вдруг понимаю, что я непочти ничего не знаю о JSONP.

Ответы на вопрос(3)

Ваш ответ на вопрос