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