Ich habe einen Tomcat 9-Server eingerichtet, der meinen API-Code hostet. Es funktioniert gut, wenn ich es vom Postboten anrufe. Ich habe auch die folgenden Filter auf die Tomcat conf/web.xml
Datei:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
</filter>
ich folgenden jQuery-Code verwenden zum Senden eine GET
Anfrage:
$(document).ready(function()
{
$.get("http://localhost:8080/myapp/webapp/cars", function(data, status){
alert("Data: " + data + "\nStatus: " + status);
});
Es führt den folgenden Fehler:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Gibt es irgendetwas, was ich auf der Serverseite mehr tun sollte, um Cross-Origin-Anfragen zuzulassen?
Wie kann ich die obige jQuery-Anfrage ändern, um diesen Fehler loszuwerden?
Viele andere Beiträge haben vorgeschlagen, einen ajax
Methodenaufruf mit dataType:"jsonp"
zu verwenden? Ist es möglich, diese Modifikation auf die obige $.get
Methode zu machen? Wenn nicht, geben Sie bitte ein Beispiel für eine GET
und POST
, um CORS mit der ajax
Methode zu aktivieren.
EDIT
ich auch mit folgenden Konfiguration versucht:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
... aber es funktioniert immer noch nicht.
Sie setzen den Init-Parameter nicht richtig. Siehe [Dokumente für den CorsFilter] (https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter). Sie müssen den Init-Parameter 'cors.allowed.origins 'auf die Ursprünge setzen, die Sie zulassen möchten (oder * für alle Ursprünge) –
@peeskillet Bitte beziehen Sie sich auf *** *** EDIT *** in der Frage. Funktioniert immer noch nicht –