Il s'agit d'une question intéressante. Il ne devrait pas y avoir de raison pour que ce soit un problème, mais vous devez prendre quelques éléments en compte :
-
Les en-têtes doivent être uniques pour votre application. Pas seulement maintenant, mais pour toujours. Vous devez vous assurer que vous les préfixez, par ex. X-MyApplication-Foo: Bar
. Ne pas le faire pourrait entraîner des conflits à l'avenir.
-
Les pare-feu sont parfois (rarement) un peu trop zélé avec le filtrage des en-têtes HTTP inconnus. Cela ne devrait pas poser de problème, mais c'est une chose à garder à l'esprit.
-
Les anciens navigateurs sont moins limités que les navigateurs modernes en ce qui concerne la taille des champs d'en-tête. Vous devez donc effectuer des tests sur le plus grand nombre possible de navigateurs.
Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser les codes d'erreur HTTP standard ? Je comprends que vous puissiez vouloir fournir des traces de pile ou d'autres informations de débogage utiles, mais dans le cas d'une erreur, ne pourriez-vous pas simplement renvoyer un blob JSON contenant les informations d'erreur, plutôt que les données JSON "résultat" normales ? Vous pourriez facilement détecter la différence sur la base du code d'erreur HTTP et traiter les deux cas différemment.
La raison pour laquelle je suis préoccupé par l'approche que vous suggérez est que les en-têtes sont utilisés pour modifier ou faire en sorte que le navigateur comportement - ils ne sont pas destinés à être un mécanisme de stockage de données.
Exemple de pseudo-code :
switch(httpResponseCode)
{
case 200:
parseResult(json);
break;
case 403:
parseForbidden(json);
break;
case 500:
parseServerError(json);
break;
default:
// bad response code, handle appropriately
}