Selon les entêtes serveur, les navigateurs (IE, Google Chrome, Firefox) réagissent différemment.

En effet l'élément content-type est nécessaire.

Content-Type: text/html

ou

Content-Type: application/json

Avec Chrome ou firefox, lors de la soumission d'un formulaire web, sans définir le content-type ou en le définissant à "application/json", il vous encapsule le retour serveur avec une balise pre :

<pre style="word-wrap: break-word; white-space: pre-wrap;">LeRetourJsonDeMonServeur
</pre>

En définissant le content-type à "text/html", vous n'aurez plus ce problème, que d'autres on déjà eu :

Définir l'en-tête Content-Type

Header Field Definitions part of Hypertext Transfer Protocol -- HTTP/1.1 RFC 2616 Fielding, et al.

En Java
response.setContentType("text/html");
En PHP
header('Content-type: text/html');