Danke für den Hinweis zum Accept'Header!
Und wenn's das nicht ist, dann geht man von einem Browser aus. Oder sucht in Strings wie dem Folgenden (Chrome, gekürzt) nach text/html:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*
Der Server kann dann mit dem gleichen Content-Type (oder eben text/html) antworten.
Man braucht da weder Query-Parameter noch geheimen Datentransfer in X-Response-Headern.
Schönes Beispiel: Weil es schlecht ist. Wenn man nämlich am Server anhand dieses Header's entscheiden will welcher Content'Type in der Response zu senden ist, darf der Accept'Header nicht mehrere Angaben liefern sondern nur genau eine.
MFG