Ein Problem, das vermutlich mehrere Entwickler haben, die in einer Web-Applikation mit Javascript auf ein backend zugreifen: Entwicklet wird auf der lokalen Maschine, das backend liegt (zum Entwickeln) auf einem anderen Server.
Browser lassen HTTP-Requests in Javascript von localhost
auf eine andere Domain nicht zu (hier gilt die same origin policy). Auf den Seiten des Mozilla Developer Network wird sehr übersichtlich erklärt, wie man diese Einschränkung sicher umgehen kann. Da wir im content der requests json verschicken müssten unsere Zugriffe recht aufwändig als preflighted requests behandelt werden.
Bisher verwendeten wir zur Umgehung dieses Problems google-chrome
mit dem Command-line switch --disable-web-security
. Etwas unschön und vor allem konnten wir mit Firefox erst testen, nachdem der Code am Entwicklungsserver deployed war.
Mit wenigen Zeilen in der lokalen apache Konfiguration ist das Problem auch vom Tisch: Man richtet einen lokalen Proxy ein, der die ajax-requests an den Server weitergibt:
<IfModule mod_proxy.c> ## mod_proxy for ajax CORS troubles ProxyPassMatch ^/(.*/specimen/.*)$ http://server.tld/$1 ProxyPassMatch ^/(.*/j_spring_security_logout)$ http://server.tld/$1 ProxyPassMatch ^/(.*/j_spring_security_check)$ http://server.tld/$1 </IfModule>
Ist das apache-Modul mod_proxy
aktiviert (a2enmod mod_proxy
), werden alle requests die in der Adresse den Pfad /specimen/
enthalten zu server.tld
umgeleitet. Gleiches gilt für die security-checks.