Ne pouvez pas spécifier les en-têtes de demande en AngularJS

J'ai 2 pièces dans mon app - Angulaire interface et le serveur rails. Et parce qu'il est différent domaines, les demandes ne fonctionne pas par défaut. Il y a beaucoup de personnel, y compris la pile, mais ça ne fonctionne pas pour moi.

C'est ma méthode angulaire de contrôleur:

$scope.test =->
  # transform = (data) ->
  #   $.param data

  $http.post('http://localhost:3000/session/create', 'token=some',
    headers:
      'Access-Control-Allow-Origin': 'http://localhost:9000',
      'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
      'Access-Control-Allow-Headers': 'Content-Type, X-Requested-With'
    # transformRequest: transform
  ).success (responseData) ->
    console.log(responseData)

J'ai fait remarquer que la transformation de données, il n'y a pas de différence dans la réponse du serveur.

Et j'ai configuré l'application (l'a vu dans certains post) comme ça:

.config ["$httpProvider", ($httpProvider) ->
  $httpProvider.defaults.useXDomain = true
  delete $httpProvider.defaults.headers.common["X-Requested-With"]
]

Je suppose que le fait de demander de ne pas ajax comme (mais je ne suis pas sûr).

Mais il n'y a pas d'en-têtes dans ma demande. Ils sont tous dans un certain domaine Access-Control-Request-Headers:access-control-allow-origin, accept, access-control-allow-headers, access-control-allow-methods, content-type:

    Request URL:http://localhost:3000/session/create
    Request Method:OPTIONS
    Status Code:404 Not Found

    Request Headers

    Accept:*/*
    Accept-Encoding:gzip,deflate,sdch
    Accept-Language:en-US,en;q=0.8,ru;q=0.6
    Access-Control-Request-Headers:access-control-allow-origin, accept, access-control-allow-headers, access-control-allow-methods, content-type
    Access-Control-Request-Method:POST
    Connection:keep-alive
    DNT:1
    Host:localhost:3000
    Origin:http://localhost:9000
    Referer:http://localhost:9000/
    User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.8 Safari/537.36

    Response Headers

    Content-Length:12365
    Content-Type:text/html; charset=utf-8
    X-Request-Id:2cf4b37b-eb47-432a-ab30-b802b3e33218
    X-Runtime:0.030128

Chrome console:

OPTIONS http://localhost:3000/session/create 404 (Not Found) angular.js:6730
OPTIONS http://localhost:3000/session/create No 'Access-Control-Allow-Origin' header is     present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access. angular.js:6730
XMLHttpRequest cannot load http://localhost:3000/session/create. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access. localhost/:1

Autres négligeable d'informations:
Sur le serveur:

class ApplicationController < ActionController::Base
  before_filter :allow_cross_domain_access

  protected

  def allow_cross_domain_access
    headers['Access-Control-Allow-Origin'] = '*'# http://localhost:9000
    headers['Access-Control-Allow-Headers'] = 'GET, POST, PUT, DELETE'
    headers['Access-Control-Allow-Methods'] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(',')
    headers['Access-Control-Max-Age'] = '1728000'

  end
end

Routes est évident post "session/create". Et la séance de contrôleur:

class SessionController < ApplicationController
  respond_to :json, :html, :js

  def create
    respond_with "logged in"
    # render nothing: true
  end
end

Je utiliser la dernière version de angulaire 1.2.0.rc-2. c'est mon projet sur github

Les en-têtes ne doivent pas être réglée correctement, vous utilisez un autre serveur pour envoyer les demandes à une application rails serveur?
J'ai généré app avec yeoman angulaires-générateur. Sur la base grunt peut-être il ya certains node.js serveur. Pensez-vous que cela puisse changer mes demandes?
La première demande reçoit une réponse 404. Vous pouvez poster à la sortie de râteau routes? (vous pouvez également vous rendre sur localhost:3000/nonexistent_page dans votre navigateur)
Il ne répond pas aux OPTIONS si, c'est nécessaire pour le contrôle en amont des demandes.
Le frontend est de faire une demande d'OPTIONS (correctement), le serveur répond avec 404 (probablement pas correcte). C'est ce qui m'amène à croire que le serveur est la question.

OriginalL'auteur zishe | 2013-10-08