2010-08-03 14 views
7

Tengo un problema con un encabezado HTTP Response Content-Type incorrecto al acceder a un servicio web Axis2 alojado en Tomcat detrás de Apache mediante un conector AJP/1.3.Cómo conservar el encabezado Content-Type de una respuesta HTTP Tomcat enviada a través de un conector AJP a Apache usando mod_proxy

puedo acceder al servicio web sin problemas en el navegador a través de su interfaz REST y puedo ver los resultados, pero de alguna manera Apache está cambiando la cabecera de respuesta Content-Type enviado por Tomcat text/xml-text/plain y me impide consumir el servicio Web a través de SOAP en NetBeans, debido a una excepción Unsupported Content-Type: text/plain Supported ones are: [text/xml].

Aquí está la sección correspondiente de la configuración de Apache mi vhosts:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName myserver.example 
    ServerAlias other.myserver.example 

    ProxyPreserveHost On 
    SetEnv force-proxy-request-1.0 1 
    SetEnv proxy-nokeepalive 1 

    <Location /axis2/services> 
     ProxyPass ajp://localhost:8009/axis2/services 
     ProxyPassReverse ajp://localhost:8009/axis2/services 
    </Location> 
</VirtualHost> 

y la sección pertinente de mi Tomcat server.xml:

<Connector port="8009" protocol="AJP/1.3" redirectPort="9443" /> 

<Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true" maxHttpHeaderSize="8192" 
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
    enableLookups="false" disableUploadTimeout="true" 
    acceptCount="100" scheme="https" secure="true" 
    clientAuth="false" sslProtocol="TLS" 
    SSLCertificateFile="path/to/bundle" 
    SSLCertificateKeyFile="path/to/key" 
    SSLPassword="S3cr3t" 
    proxyName="myserver.example" proxyPort="443" /> 

Si accedo a la WS directamente en Tomcat mediante el valor por defecto conector en el puerto 8080 obtengo el content-type correcto, pero si accedo a él a través de Apache obtendré text/plain, por lo que definitivamente es un problema con el proxy.

¿Cómo puedo resolver este problema?

EDIT: Tengo que funcione mediante el conector HTTP Tomcat para el proxy, en lugar de la AJP uno, pero yo preferiría usar mod_ajp si encuentro una solución de trabajo.

acabo de cambiar las líneas

ProxyPass ajp://localhost:8009/axis2/services 
ProxyPassReverse ajp://localhost:8009/axis2/services 

a

ProxyPass http://localhost:8080/axis2/services 
ProxyPassReverse http://localhost:8080/axis2/services 
+0

http://markmail.org/message/btwcnbl2i7ftwj4n#query:apache%20ajp%20changes%20Content -Tipo% 2Bágina + página: 1 + medio: btwcnbl2i7ftwj4n + estado: los resultados parecen estar relacionados con su problema – JoseK

+1

Sí, es el mismo problema y ya encontré algunos archivos de correo como el de 2007 antes de publicar la pregunta aquí, pero todavía puedo encuentra una solución a este problema – tsbnunes

Respuesta

2

He pasado los últimos dos días en el trabajo rastrear algo similar a esto.

Ha habido algunos errores que producen problemas similares a este en el pasado, tanto en Apache HTTPD como en Tomcat, pero la mayoría parecen haberse resuelto hace al menos 2 años. Creo que éste es lo que es probable que sea golpear cualquier persona que utilice el software actual - sin duda es lo que estoy experimentando actualmente:

https://issues.apache.org/bugzilla/show_bug.cgi?id=49929

Puede haber un parche en Tomcat 7.x, pero nadie lo ha probado todavía. Planeo hacerlo cuando tenga tiempo en alrededor de una semana, así como producir un caso de prueba confiable para que esto pueda solucionarse en todas las versiones relevantes de tomcat.

Esto solo ocurre cuando se utiliza APR, por lo que una solución intermedia es evitar eso (pero eso podría tener consecuencias en el rendimiento).

9
# DefaultType: the default MIME type the server will use for a document 
# if it cannot otherwise determine one, such as from filename extensions. 
# If your server contains mostly text or HTML documents, "text/plain" is 
# a good value. If most of your content is binary, such as applications 
# or images, you may want to use "application/octet-stream" instead to 
# keep browsers from trying to display binary files as though they are 
# text. 
# 
DefaultType None 

Esta es la solución. Mire esta parte en el httpd.conf, es importante que DefalutType sea None. Si ve texto plano/este es el problema. Lo siento, esta solución no es mía pero no sé en qué blog la he encontrado :-)

+0

me funciona, muchas gracias – zhiyelee

+0

. el proxy estaba luchando con un 401. ¡ESTO FUNCIONA! – matzeihnsein

1

Esto resolvió un dolor de cabeza para mí. Tenía Apache 2.2 como frontend con mod_proxy_ajp y jboss como back-end.Varias transacciones fallidas con

Message: Client found response content type of 'text/plain; charset=UTF-8', but expected 'text/xml'. 

Mi Apache tenían 'text/plain' como DefaultType. Sin embargo, no cambié esto a nivel global (httpd.conf). Me acerqué y agregué una nueva línea a mi configuración de vhost en la sección de configuración <proxy> configurándola en text/xml.

DefaultType text/xml 

Yo trate de usar None no funcionó para mí, entonces yo acabo:

'' in the error msg instead of 'text/plain'. 
Cuestiones relacionadas