2010-08-03 17 views
7

Mam problem z niepoprawnym nagłówkiem HTTP Response Content-Type podczas uzyskiwania dostępu do usługi WWW Axis2 hostowanej w Tomcat za Apache przez złącze AJP/1.3.Jak zachować nagłówek Content-Type odpowiedzi HTTP Tomcat wysłanej przez złącze AJP do Apache za pomocą mod_proxy

mogę uzyskać dostęp do usługi internetowej bez problemów w przeglądarce poprzez relaksującego interfejsu i mogę zobaczyć wyniki, ale jakoś Apache zmienia nagłówek odpowiedzi Content-Type wysłana przez Tomcat z text/xml do text/plain i to powstrzymuje mnie od spożywania usługę internetową poprzez SOAP w NetBeans, z powodu wyjątku od Unsupported Content-Type: text/plain Supported ones are: [text/xml].

Oto odnośny fragment mojego konfiguracji Apache vhostów:

<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> 

a odpowiednim przekroju moim 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" /> 

Gdybym dostęp do WS bezpośrednio w Tomcat przy użyciu domyślnego złącze na porcie 8080 Dostaję poprawną content-type, ale jeśli mam dostęp do niego przez Apache, to dostaję text/plain, więc jest to zdecydowanie problem z proxy.

Jak mogę rozwiązać ten problem?

EDIT: Dostałem go do pracy za pomocą złącza HTTP Tomcat dla proxy, zamiast AJP jednym, ale wolałbym użyć mod_ajp jeśli znajdę roztwór roboczy.

Właśnie zmienił

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

linie

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

http://markmail.org/message/btwcnbl2i7ftwj4n#query:apache%20ajp%20changes%20Content -Type% 2Bpage + page: 1 + mid: btwcnbl2i7ftwj4n + state: wyniki wydają się być powiązane z Twoim problemem – JoseK

+1

Tak, to ten sam problem i znalazłem już kilka archiwów pocztowych, takich jak ten z 2007 roku przed opublikowaniem pytania tutaj, ale nadal mogę znaleźć rozwiązanie tego problemu. – tsbnunes

Odpowiedz

2

Spędziłem ostatnie dwa dni w pracy tropienia coś podobnego do tego.

Było kilka błędów powodujących podobne problemy w przeszłości zarówno w Apache HTTPD, jak i Tomcat, ale większość z nich została rozwiązana co najmniej 2 lata temu. Myślę, że ten jest co ktoś za pomocą aktualnego oprogramowania może być uderzenie - na pewno jest to, co ja przeżywa obecnie:

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

Nie może być łatka w Tomcat 7.x, ale nikt go nie testował jeszcze. Mam zamiar to zrobić, gdy będę miał czas w ciągu tygodnia, a także wyprodukować wiarygodny test testowy, dzięki czemu można go naprawić we wszystkich odpowiednich wersjach tomcat.

Dzieje się tak tylko w przypadku korzystania z APR, więc jednym z pośrednich rozwiązań jest uniknięcie tego (ale może to mieć konsekwencje dla wydajności).

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 

To jest rozwiązanie. Spójrz na tę część w httpd.conf, Ważne jest, że DefalutType ma wartość None. Jeśli widzisz zwykły tekst, to jest problem. Niestety, to rozwiązanie nie jest moje, ale nie wiem, na którym blogu go znalazłem :-)

+0

to działa dla mnie, wiele thx – zhiyelee

+0

dzięki. pełnomocnik borykał się z 401. TO DZIAŁA! – matzeihnsein

1

To rozwiązało dla mnie ból głowy. Miałem Apache 2.2 jako frontend z mod_proxy_ajp i jboss jako backend.Kilka transakcji nie powiodło się z

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

My Apache miał 'text/plain' jako DefaultType. Nie zmieniłem tego jednak na poziomie globalnym (httpd.conf). Poszedłem dookoła i dodałem nową linię do mojej konfiguracji vhost w sekcji konfiguracyjnej <proxy> ustawiając ją na text/xml.

DefaultType text/xml 

Próbowałem za pomocą None nie działa na mnie, potem ja właśnie:

'' in the error msg instead of 'text/plain'. 
Powiązane problemy