web-dev-qa-db-de.com

cross Origin-Anforderungen werden in Tomcat 8 mit dem HTTP-Statuscode 403 blockiert

es mag wie ein bekanntes Thema erscheinen und es gibt viele Fragen zu diesem Thema, jedoch ist meine Situation sehr merkwürdig. Ich habe eine einfache Webanwendung, die auf Tomcat 8.0.36 bereitgestellt wird. Ich habe den CORS richtig konfiguriert:

<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.Apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Die Cross-Origin-Anforderungen werden vom Browser blockiert:

Auf der angeforderten Ressource ist kein Header "Access-Control-Allow-Origin" vorhanden. Origin ' https://www.mytestpage.com ' hat daher keinen Zugriff. Die Antwort hatte den HTTP-Statuscode 403.

In der Tomcat-Protokolldatei ist auch der Antwortcode von 403 zu sehen. Interessant ist, dass der Code meiner Anwendung im Falle von Ursprungsanforderungen nicht ausgeführt wird. Die Anfragen werden vor dem Erreichen meiner Bewerbung gesperrt und 403 wird sofort gesendet. Ich habe keinen Apache vor Tomcat, es ist ganz einfach Tomcat. Ich habe viele Dinge ausprobiert, einschließlich der Whitelisting der Ursprünge und der Angabe der zulässigen Header - nichts hat geholfen. Ich habe auch versucht, den Header programmgesteuert festzulegen, bis ich herausfand, dass der Code im Falle einer Cross-Origin-Anforderung niemals ausgeführt wird.

UPD: Der Endpunkt akzeptiert POST -Anfragen. Diese POST -Anfragen werden als XmlHttpRequests aus dem JS-Snippet gesendet. 

Irgendwelche Ideen was es sein kann?

p.s Ich kann dieselben Origin-Anfragen erfolgreich machen.

7
bekon

Ich habe herausgefunden, was das Problem war - ich musste den Content-Type-Header in der Anfrage setzen, sonst würde die Anfrage blockiert. - Tomcat CORS Filter

2
bekon

Sie müssen tatsächlich Access-Control-Allow-Origin und Access-Control-Allow-Methods einstellen. Hier ist ein Beispiel:

Access-Control-Allow-Origin: http://www.myhost.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE

Außerdem müssen Sie die "OPTIONS" -Methode akzeptieren, die beide Access-Control-Allow-*-Kopfzeilen zurückgibt. Einige Browser können diese Art von Anforderung vor Ihrer tatsächlichen Anforderung ausgeben (z. B. "PUT" -Anforderung), um die Zugriffsinformationen des Dienstes abzurufen.

1
Boris Brodski

Ich bin gerade in eine ähnliche Situation geraten. Ich habe es gelöst, indem ich denselben Tomcat-Server für alle meine benötigten Web-Apps verwendet habe. Außerdem musste ich anstelle von localhost einen detaillierten Namen für den Tomcat-Server verwenden. Ich habe keine CORS-Filterprobleme mehr gesehen.

0