2012-10-15 17 views
10

Ho un servizio REST che accetta i parametri in/{parametro} formaApache mod_proxy url codifica

Inoltre v'è Apache2 che inoltra le richieste al websevice

<VirtualHost *:9091> 
    AllowEncodedSlashes NoDecode 
    LogLevel debug 
    ProxyPass /webservice balancer://api/webservice 

    <Proxy balancer://api> 
    BalancerMember http://localhost:8030 
    </Proxy> 
</VirtualHost> 

parametri possono contenere caratteri codificati, come % 2f (/)

Il problema è che Apache codifica nuovamente questi caratteri e Webservice riceve% 252F anziché% 2F

[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(46): proxy: BALANCER: canonicalising URL //api/webservice/Interface GigabitEthernet1%2F0%2F2 
[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(581): proxy: BALANCER (balancer://api) worker (http://localhost:8030) rewritten to http://localhost:8030/Interface%20GigabitEthernet1%252F0%252F2%20Utilization 

Se richiedo il servizio web direttamente, Tomcat/Jetty gestisce la ricerca e il servizio riceve il parametro corretto.

risposta

9

risolto con specificando

ProxyPass /webservice balancer://api/webservice nocanon 
1

Un po 'fuori tema dal momento che questo non risolve il problema con barre ma voglio aggiungere che qui comunque se qualcuno corre per lo stesso problema, come ho avuto.

Ho avuto un problema simile a quello che i caratteri speciali svedesi (åäö) nei parametri url non venivano gestiti correttamente quando passavano attraverso il proxy apache. Si è scoperto che l'apache andava bene, ma nell'istanza tomcat ricevente il connettore AJP mancava la configurazione di URIEncoding.

Dal mio gatto server.xml:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8080" URIEncoding="UTF-8"/>