2016-05-17 3 views
6

Ich verwende einen Spring-API-Server und einen Angular-CLI-Server, um meinen statischen Inhalt bereitzustellen. In der Produktion werden wir ein CDN verwenden, aber für die Entwicklung laufen sowohl der Front- als auch der Backend-Server in meiner lokalen Box an verschiedenen Ports. Der Spring-Server liefert die erste HTML-Seite und dann kommen der Rest von JS, CSS und HTML aus dem angular-cli/CDN.So geben Sie 'Access-Control-Allow-Origin' an, wenn angle-cli serve ausgeführt wird

Das Problem ist, dass, wenn der Aufruf von System.import() gemacht wird, beschwert sich der Browser über CORS: XMLHttpRequest kann http://localhost:4200/system-config.js nicht geladen werden. Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Origin 'http://localhost:8080' ist daher nicht erlaubt. zone.js: 323 Fehler: Fehler: XHR Fehler beim Laden http://localhost:4200/system-config.js (...)

Wie kann ich Winkel-cli konfigurieren Header die 'Access-Control-Allow-Origin' zu setzen, so der Browser kotze nicht.

+0

Ich habe überlegt, eine Art "Proxy" zu erstellen, um die Anfragen während der Entwicklungszeit an den API-Server zu senden, aber ich bin auch an etwas weniger stinkendem interessiert ... –

Antwort

0

Ich löste dieses Problem tatsächlich mit dem ember-cli-cors Add-on. Alles, was Sie tun müssen, ist es mit dem ng-Befehl wie folgt zu installieren: ng installieren ember-cli-cors

+0

Es sieht so aus, als wäre nur das Paket npm in package.json devDependencies für "ember-cli-cors" installiert worden. Wie weiß "ng serve" darüber nach der Installation? Fühlt sich so an, als müsste ich es importieren oder zu system-config.ts hinzufügen? –

+5

Die angegebene Befehlsinstallation ist ungültig. Informationen zu den verfügbaren Optionen finden Sie unter 'ng help'. – marcel

1

Die Konfiguration zur Unterstützung von CORS erfolgt auf dem Server. Sie müssen Ihre Spring-API aktualisieren, um Anfragen von der CLI-App zuzulassen, die standardmäßig auf Port 4200 gehostet wird.

0

Sie können eine proxy config hinzufügen. Es wird die Anfrage an die Domain Ihres Servers "weitergeben".

-1

FWIW,

CORS hat in Winkel CLI nun aktiviert wurde. Standardmäßig ist der Header Access-Control-Allow-Origin auf * eingestellt. Nicht sicher, wann genau es veröffentlicht wurde, aber sicher 1.0.0 und später haben es aktiviert.

Wie bei allen CORS-Problemen muss auch Ihr API-Server so konfiguriert werden, dass er CORS akzeptiert.

0

Ich verbrachte gerade 20 Stunden damit, dieses Problem zu lösen und zahlreiche Beiträge zu lesen. Die schnelle Antwort ist, ändern Sie die Server-CORS-Handhabung und vermeiden Sie Glassfish. Der folgende Code funktioniert bei Tom ee (möglicherweise anderen), nicht jedoch bei Glassfish.

@Provider 
public class NewCrossOriginResourceSharingFilter implements ContainerResponseFilter { 

@Override 
public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { 
    response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); 
    response.getHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); 
    response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type"); 
} 
} 

den Code Zeile für Zeile von Halbierungs fand ich, dass das Hinzufügen der "Access-Control-Allow-Headers" Aufruf wird eine Ausnahme in Glasfischen in einem Internal Server Error resultierende (500). Anscheinend ist die Ausnahme seit über einem Jahr dort und zeigt keine Anzeichen von behoben zu werden.

Ich konnte nie die Proxy-Config-Lösung funktionieren. Ich würde Debugger-Nachrichten an die Wirkung von

/api/path/users => http:localhost:8080/ 

Es scheint, dass alle hinteren Pfad oder Abfrage params werden abgeschnitten durch den Proxy-Filter sehen.

Ich hoffe, dass dies jemand eine Menge Zeit spart.

Verwandte Themen