Only a while ago I’ve started to embrace the HTTP concepts, shortly after trying to build a simple REST engine. Not RESTfull, that would another story.
Most of CMSes, websites, well actually in general we, their authors, developers, simply ignore requests of the application requesting data. They provide always unified response as HTML. Even when implementing AJAX service, the requested accept format of the client application (not a browser) is ignored and is being served JSON on each response.
Let’s not forget: Web browsers are applications able to run applications within themselves – we are used to call them web apps. They can define Accept header different from the browser application. The web app might be written by you, but it might as well be written by other developer later.
There should be no assumption on the best communication format. JSON might be cool and speedy right now, but even now there are other compressed incompatible formats.
That’s why I believe the response of the server should be handled by injectable handler according to Accept header. Writing such handler would allow future extension yet provide clear application responsibilities separation e.g. as a module.