Angular: Cabeçalhos personalizados são ignorados por $ http e $ resource. Por quê?

Estou tentando acessar um serviço REST que não controle. O primeiro problema é que o serviço não inclui um cabeçalho Access-Control-Allow-Origin, que é um problema que, se bem entendi, imediatamente me limita ao JSONP.

Além disso, por padrão, esse serviço envia XML em vez de JSON, embora seja capaz de enviar JSON. Eu acho que deveria responder ao meu cabeçalho Accept, as pessoas responsáveis ​​pelo serviço dizem que olha para o meu Content-Type. Isso significaria que eu precisaria fazer um POST ao invés de um GET (embora get faz mais sentido quando eu estou apenas obtendo alguns dados estáticos, certo?).

Teimoso como eu sou, estou tentando o meu cabeçalho Aceitar primeiro. Como o Angular aceita apenas JSON, eu esperaria que ele usasseAccept: application/json cabeçalho por padrão, mas isso não acontece, e ignora minhas tentativas de configurá-lo manualmente:

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;
}]);

Eu faço isso novamente no recurso real:

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'
    }
});

Mas ainda assim, os cabeçalhos de solicitação contêmAccept: */*.

Minha pergunta é: POR QUE? Por que o Angular ignora meus cabeçalhos? E como faço para usar os cabeçalhos adequados?

E também: existe uma maneira de usar o JSONP em um POST?

Editar: Originalmente eu usei o Angular 1.0.7, mas eu tentei com o 1.2.3 e obtive os mesmos resultados. Cabeçalhos são ignorados, mas todo mundo afirma que esta é a maneira de fazê-lo.

Eu também tentei fazer isso diretamente com $ http, em vez de com $ resource, com os mesmos resultados.

Editar 2: Aqui está umJSFiddle. Ele é anonimizado e não usa meu servidor real, mas usando as ferramentas do Firebug / developer, você pode verificar se ele enviaAccept: */* em ambas as chamadas, apesar das minhas muitas tentativas deapplication/json cabeçalhos. E esse é o meu verdadeiro problema aqui. No meu servidor real, estou obtendo um resultado XML por causa disso, apesar da capacidade do meu servidor real de enviar JSON.

(Se o servidor real suporta jsonp é menos relevante no momento. Este servidor fictício claramente não funciona, mas tudo bem. Eu apenas me preocupo com os cabeçalhos.)

Editar 3: Eu tentei as duas soluções sugeridas abaixo:

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

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

Eu tentei ambas as instruções separadamente. No controlador e, em seguida, no serviço antes da chamada http em si. Ainda não funciona.

Alguém pode me dar um JsFiddle onde isso é mostrado para funcionar?

Editar 4: Percebo que quando uso GET em vez de JSONP, o cabeçalho Accept está correto. Mas a resposta é rejeitada porque não tem o cabeçalho correto.

Que tipo de cabeçalhos deve ter uma chamada JSONP? Porque há muito mais cabeçalhos na chamada JSONP, mas nada que o identifique como JSONP. O servidor precisa ter suporte JSONP explícito para que isso funcione? De repente, percebo que não sei o suficiente sobre jsonp.

questionAnswers(3)

yourAnswerToTheQuestion