13 points par xguru 2024-09-18 | 7 commentaires | Partager sur WhatsApp
  • Proposition d'une nouvelle méthode HTTP, QUERY
    • Une méthode de requête qui permet d'envoyer du contenu avec la requête, tout en étant sûre et idempotente
    • Cette méthode peut être utilisée lorsque les données transmises dans la requête sont trop volumineuses pour être encodées dans l'URI
  • Lorsque les paramètres de requête dépassent plusieurs Ko, de nombreuses implémentations imposent des limites
    • Il est souvent impossible de connaître cette limite à l'avance, et l'encodage est inefficace
  • C'est pourquoi de nombreuses implémentations utilisent POST à la place de GET pour exécuter des requêtes
    • Mais sans connaissance spécifique du serveur, il est impossible de savoir si l'opération est sûre et idempotente, ce qui entraîne au final les mêmes limitations de base qu'avec GET
  • La méthode QUERY apporte une solution pour combler l'écart entre l'usage de GET et celui de POST
    • Comme avec POST, l'entrée d'une opération de requête est transmise dans le contenu de la requête, et non dans l'URI de requête
    • Mais contrairement à POST, cette méthode est explicitement sûre et idempotente, ce qui permet des fonctionnalités comme la mise en cache et la relance automatique

Requête

QUERY /contacts HTTP/1.1  
Host: example.org  
Content-Type: example/query  
Accept: text/csv  
  
select surname, givenname, email limit 10  

Réponse

HTTP/1.1 200 OK  
Content-Type: text/csv  
Content-Location: /contacts/responses/42  
Location: /contacts/queries/17  
  
surname, givenname, email  
Smith, John, john.smith@example.org  
Jones, Sally, sally.jones@example.com  
Dubois, Camille, camille.dubois@example.net  

7 commentaires

 
regentag 2024-09-19

Je ne vois pas pourquoi il faudrait ajouter ça au protocole.
Y a-t-il vraiment tant de scénarios où les paramètres de requête dépassent quelques Ko ?

 
savvykang 2024-09-19

https://www.baeldung.com/cs/http-get-with-body
On dirait que la spécification HTTP laisse une telle marge d’interprétation au lecteur et a évolué de façon si incohérente qu’ils semblent vouloir créer carrément une nouvelle méthode

 
nemorize 2024-09-18

GET avec un corps de requête

 
beoks 2024-09-19

Certaines bibliothèques clientes n’offrent tout simplement aucun moyen d’envoyer un corps de requête avec un GET, donc cela pourrait constituer une alternative.

 
nemorize 2024-09-20

Du point de vue de l’implémentation des bibliothèques, n’est-ce pas plutôt une proposition de modification du standard encore plus superflue ?

Dans la spécification standard, GET ne peut pas avoir de corps de requête, donc si une bibliothèque transmet arbitrairement un corps de requête...
Dans ce cas, ne suffirait-il pas simplement d’implémenter une méthode personnalisée au niveau de la bibliothèque ?

Il est difficile d’en nier totalement l’utilité, mais cela me semble moins convaincant que PUT, PATCH ou DELETE, apparus lors du passage de HTTP 1.0 à 1.1.

 
babadudu 2024-09-23

https://www.rfc-editor.org/rfc/rfc9110.html#name-method-definitions

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET

https://stackoverflow.com/questions/978061/http-get-with-request-body

https://elastic.co/guide/en/…

  1. Dans la spécification standard, la méthode GET ne précise rien concernant le body, mais il n’a jamais été dit qu’il était interdit d’en mettre un.

  2. Comme certains frameworks serveur ne traitent pas le body avec la méthode GET, MDN recommande de ne pas mettre de body dans une requête GET.

  3. Elasticsearch prend en charge le body avec la méthode GET.

 
vwjdalsgkv 2024-09-20

Je pense qu’il faudrait réfléchir davantage avant de modifier la spécification à cause de l’implémentation d’une bibliothèque.