Assurez-vous de lire la réponse de SilverlightFox. Elle met en évidence une raison plus importante.
La raison en est principalement que si vous connaissez la source d'une demande, vous pouvez vouloir la personnaliser un peu.
Supposons par exemple que vous ayez un site web contenant de nombreuses recettes. Vous utilisez un framework jQuery personnalisé pour faire glisser les recettes dans un conteneur en fonction d'un lien cliqué. Le lien peut être www.example.com/recipe/apple_pie
Normalement, cela renvoie une page complète, un en-tête, un pied de page, le contenu de la recette et les publicités. Mais si quelqu'un navigue sur votre site web, certaines de ces parties sont déjà chargées. Vous pouvez donc utiliser un AJAX pour obtenir la recette sélectionnée par l'utilisateur, mais pour gagner du temps et de la bande passante, ne pas charger l'en-tête, le pied de page et les publicités.
Il suffit maintenant d'écrire un point de terminaison secondaire pour les données, comme par exemple www.example.com/recipe_only/apple_pie
mais c'est plus difficile à maintenir et à partager avec d'autres personnes.
Mais il est plus facile de détecter qu'il s'agit d'une requête ajax qui fait la demande et ne renvoie qu'une partie des données. De cette manière, l'utilisateur gaspille moins de bande passante et le site semble plus réactif.
Les frameworks ajoutent simplement l'en-tête parce que certains peuvent trouver utile de garder une trace des requêtes qui sont ajax et de celles qui ne le sont pas. Mais l'utilisation de ces techniques dépend entièrement du développeur.
C'est en fait un peu la même chose que le Accept-Language
en-tête. Un navigateur peut demander à un site web de me montrer une version russe de ce site sans avoir à insérer /ru/ ou un élément similaire dans l'URL.