I pensez à la spécification vous permet d'ajouter un corps de message, donc la réponse à votre question devrait être Non (mais avec des réserves).
Vérifions d'abord la spécification (je cite le texte de l'article) RFC 7231 , RFC 7232 y RFC 7234 puisque la RFC 2616 à laquelle il est fait référence dans d'autres réponses a été rendue obsolète par celles-ci).
Extrait du RFC 7230 :
The presence of a message body in a request is signaled by a
Content-Length or Transfer-Encoding header field. Request message
framing is independent of method semantics, even if the method does
not define any use for a message body.
Notez que la partie "Un corps de message NE DOIT PAS être inclus dans une demande si la spécification de la méthode de demande (section 5.1.1) ne permet pas d'envoyer un corps d'entité dans les demandes." présent dans l'ancien RFC 2616 a été supprimé.
Également RFC 7231 dit ceci à ce sujet :
A payload within a GET request message has no defined semantics;
sending a payload body on a GET request might cause some existing
implementations to reject the request.
Donc, à mon avis, cela signifie que vous pouvez ajouter un corps de message à une requête GET (et cela devrait répondre à votre question initiale), mais vous devez être prudent. Le cas mentionné dans les spécifications n'est pas le seul dont vous devez être conscient, de nombreux outils, clients et serveurs ne s'attendent tout simplement pas à un corps de message et peuvent mal se comporter. Par exemple, dans Chrome, XMLHttpRequest laisse tomber le corps du message pour les GET.
Un autre problème est celui de la mise en cache. Selon le RFC 7234 .
The primary cache key consists of the request method and target URI
[...]
If a request target is subject to content negotiation, its cache
entry might consist of multiple stored responses, each differentiated
by a secondary key for the values of the original request's selecting
header fields.
Cela signifie que des demandes ayant des corps différents mais la même url (et éventuellement des en-têtes sélectionnés), seront considérées comme ayant la même réponse par un cache, même si le corps du message a été précédemment transmis correctement au serveur.
En fin de compte, je pense que, dans la mesure du possible, vous devriez éviter d'utiliser des corps de message dans les GET, à moins que
- Vous contrôlez le client
- Vous contrôlez le serveur
- Vous connaissez les proxies potentiels, les caches qui pourraient vous gêner.
- Vous désactivez la mise en cache dans la réponse (il se peut en fait que vous puissiez (ab)utiliser les en-têtes pour pouvoir mettre en cache, mais je n'ai pas bien étudié l'idée).