HTTP requests aus Javascript auf der Entwicklermaschine

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 http://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.

Ubuntu legt die Apache Logfiles als gzippte Dateien in /var/log/apache2 ab. Um von alten Logdateien nachträglich eine Statistik zu erstellen kann folgendes Kommando nützlich sein:

for i in `ls -tr /var/log/apache2/ssl_meinhost.com*access*gz` ; 
do  
  gunzip -c $i > /tmp/ssl_log.txt; /usr/lib/cgi-bin/awstats.pl 
    -config=ssl.meinhost.com -LogFile=/tmp/ssl_log.txt ;
done

ssl_meinhost.com bzw. ssl.meinhost.com sind natürlich auf die entsprechenden Logfiles bzw. awstats-Konfiguration anzupassen.

Links: