Beim Aufsetzen eines Reverse-Proxies gilt es im Zusammenspiel mit XPage-basierten Web-Applikationen ein Detail zu berücksichtigen: Für die Implementierung des Partial Refresh-Mechanismus mußte ein zusätzlicher HTTP-Header eingeführt werden, durch den u.a. Redirects an den Webbrowser gesteuert werden.
Da im Zusammenspiel mit AJAX-basierten Aktionen wie dem Partial Refresh nicht mit vom Server gelieferten HTTP-Responsecodes (302 bzw. 307) gearbeitet werden kann, wird der HTTP-Response der HTTP-Header „X-XspLocation“ angehängt.
Beim Öffnen eines Server-seitigen Links wird so dem Browser mitgeteilt, wohin die Reise geht, und die eigentliche Umleitung wird Clientseitig (via JavaScript) durchgeführt. Wird der Header also nicht durch die Regeln im Reverse-Proxy überarbeitet, funktioniert die Applikation höchstwahrscheinlich nicht.
Hier ein kurzes Beispiel und die HTTP-Daten, die durch Klicken auf den Link gesendet werden.
Beispiel-Code eines Links in der XPage:
<xp:link escape="true" id="link1" text="ServerSideLink">
<xp:eventHandler event="onclick" submit="true"
refreshMode="norefresh" execMode="partial">
<xp:this.action>
<xp:actionGroup>
<xp:openPage name="/XPage2Open.xsp" />
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:link>
HTTP Request (Client an Server)
POST /xpage.nsf/current.xsp?$$ajaxmode=full&$$ajaxid=%40none HTTP/1.1
Host: blog.hasselba.ch
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,...
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: https://blog.hasselba.ch/xpages.nsf/current.xsp
Content-Length: 306
Cookie: DomAuthSessId=XXXXX; SessionID=XXXX
Pragma: no-cacheCache-Control: no-cache
[Fett hervorgehoben: Standard-Header bei AJAX-Requests]
HTTP Response (Server an Client)
HTTP/1.1 200 OK
Server: Lotus-Domino
Date: Thu, 09 Jun 2011 06:22:56 GMT
X-XspLocation: http://blog.hasselba.ch/xpages.nsf/XPage2Open.xsp
Content-Length: 20
Connection: Keep-Alive
Content-Encoding: gzip
[Fett hervorgehoben: Der Header mit dem neuen Ziel. Der Client öffnet die Seite via JavaScript]
Pingback: Performance-Tuning (5): Links und xsp.redirect | blog@hasselba.ch
Beispiel für Apache2:
Header edit X-XspLocation /website.nsf/page.xsp/ /