Ich kann das nicht spezifizieren-Header in der Anfrage in AngularJS

Habe ich 2 Teile in meiner app - Winkel-frontend und rails server. Und weil es verschiedene domains, Anfragen funktioniert nicht standardmäßig. Es gibt eine Menge von Mitarbeitern über, die, einschließlich stack, aber es funktioniert nicht für mich.

Dies ist meine Methode in eckigen controller:

$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)

Habe ich kommentiert, Daten zu transformieren, es gibt keinen Unterschied in der server-Antwort.

Und ich konfigurierte app (habe das in einigen post) so:

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

Ich denke, das macht die Anfrage nicht ajax-like (bin mir aber nicht sicher).

Aber es gibt keine Header meiner Anfrage. Sie alle, die in irgendeinem Feld 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

Andere unwichtige Informationen:
Auf dem server:

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

Routen ist offensichtlich post "session/create". Und session controller:

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

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

Ich benutze die Letzte version von Winkel-1.2.0.rc-2. dies ist mein Projekt auf github

  • Der Header muss nicht korrekt eingestellt, sind Sie mit einem anderen webserver weiterleiten von Anforderungen an eine rails-app-server?
  • Ich generierte app mit yeoman-angular-generator. Es basiert auf grunt vielleicht gibt es einige node.js server. Denken Sie, es kann ändern Sie meine Anforderungen?
  • Die erste Anfrage erhält eine 404-Antwort. Kannst du die Ausgabe von rake routes? (alternativ gehen Sie zu localhost:3000/nonexistent_page in Ihrem browser)
  • Routen ist in Ordnung - ich änderungen von post-auf get-und respond_with "logged in" auf render nothing: true, und es zeigt eine leere Seite ohne jegliche Fehler.
  • Es reagiert nicht auf OPTIONEN aber, dies ist notwendig für die preflight-Anfragen.
  • Ich habe hinzuzufügen, bevor Sie es, ändern Sie einfach in der post, nicht geholfen. By the way, ich habe versucht, github.com/cyu/rack-cors dieses Juwel, Gleiches Ergebnis. Die Ausgabe im frontend-Teil, denke ich.
  • Dem frontend ist es ein OPTIONS-request (richtig), der server antwortet mit Statuscode 404 (wahrscheinlich nicht korrekt). Das ist, was führt mich zu glauben, dass der server das Problem.
  • Vielleicht sollte ich das machen Anfrage zu open api und überprüfen Sie die Reaktion.
  • Sie wurden auch richtig, danke für die Hilfe.

InformationsquelleAutor zishe | 2013-10-08
Schreibe einen Kommentar