我有兩個Jetty AppServers在Apache 2.2反向代理之後運行Grails Web App。 SSL終止由apaches完成,他們將HTTP傳遞給Jetty AppServers。Grails重定向 - 爲什麼它總是絕對的?
當Grails的Web應用程序確實像這樣
redirect(action:'index')
最終用戶接收與一個完整的URL,這是使用HTTP 一個HTTP 302重定向請求重定向://協議,不HTTPS ://:
HTTP/1.1 302 Found
Date: Tue, 08 Mar 2011 17:50:46 GMT
Server: Jetty(6.1.17)
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Location: http://hostname.domain/web/?lang=en
這是煩人的,因爲所有的HTTP請求得到由代理捕獲並重定向到HTTPS請求。所以這是一次不必要的往返。
我看到兩個解決方案:
- 的Apache的mod_proxy可以重寫位置的頭部到https://傳遞的響應上給用戶之前。
Location: /web/?lang=en
第一個選項是有點笨,我認爲,正確的:(?能的話)
你知道如何讓grails發送非絕對重定向頭(理想情況下,不必切換每個重定向以使用uri:
)?
編輯:目前我有以下通過修改響應頭的第一種方法解決方法(a2enmod headers
,再加入在<Location>
Header edit Location ^http://(.*)$ https://$1
)。靈感來自this serverfault post。我仍然想知道爲什麼這是必要的。
正確,雖然FWIW,我還沒有看到任何瀏覽器無法支持相對URL。我們試圖停止使用IE7 Beta 1,並在第二天恢復更換。 :-) – EricLaw 2011-03-09 06:50:51