I stumbled upon a strange issue when I recently deployed a JSF 2.0 web application. The application was developed using Jetty, and was working fine there. However when I deployed the application on a server, the page layout was utterly broken and Firefox complained that it would not load some CSS resources because of the wrong content type application/xml+xhtml
.
On the server, a Tomcat is connected to an Apache web server via mod_proxy and mod_proxy_ajp. I found out that the Tomcat itself delivered the CSS resources without a Content-Type
header, but the Apache web server returned a Content-Type: application/xml+xhtml
. Actually, mod_proxy always adds a Content-Type
header if it is missing, and tries to guess the right content type by the file suffix.
I searched the net for a proper solution of this issue, but found none. After some experiments, a working solution was to configure the Apache web server to force the content type of all .css.xhtml
files to text/css
:
<LocationMatch "\.css\.xhtml$">
ForceType text/css
</LocationMatch>
However I don’t know if this is the best practice. A likely better solution would be the Mojarra Faces servlet to return a proper content type for the CSS files.