13 pontos por xguru 2024-09-18 | 7 comentários | Compartilhar no WhatsApp
  • Proposta de um novo método HTTP, QUERY
    • Um método de requisição seguro e idempotente que pode enviar conteúdo na requisição
    • Pode ser usado quando os dados enviados na requisição são grandes demais para serem codificados na URI
  • Quando os parâmetros de consulta passam de alguns KB, muitas implementações impõem limites
    • Muitas vezes não é possível saber esse limite com antecedência, e a necessidade de codificação torna isso ineficiente
  • Por isso, muitas implementações usam POST em vez de GET para executar consultas
    • Porém, sem conhecimento específico do servidor, não é possível saber se isso é seguro e idempotente, então há limitações básicas em comparação com GET
  • O método QUERY oferece uma solução para preencher a lacuna entre o uso de GET e POST
    • Assim como no POST, a entrada para a operação de consulta é enviada no conteúdo da requisição, e não como parte da URI da requisição
    • Mas, ao contrário do POST, esse método é explicitamente seguro e idempotente, permitindo recursos como cache e novas tentativas automáticas

Requisição

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

Resposta

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 comentários

 
regentag 2024-09-19

Não entendo por que isso precisa ser adicionado ao protocolo.
Existem mesmo tantos cenários em que os parâmetros de consulta passam de alguns KB?

 
savvykang 2024-09-19

https://www.baeldung.com/cs/http-get-with-body
Parece que a especificação HTTP deixa margem para interpretação por parte do leitor e muda de forma inconsistente, a ponto de estarem tentando criar um método completamente novo

 
nemorize 2024-09-18

GET com corpo da requisição

 
beoks 2024-09-19

Algumas bibliotecas de cliente nem sequer têm uma forma de enviar um corpo de requisição ao fazer um GET, então isso parece que pode ser uma alternativa.

 
nemorize 2024-09-20

Do ponto de vista da implementação das bibliotecas, não seria, na verdade, uma proposta de mudança de padrão ainda mais desnecessária?

Pela especificação do padrão, GET não pode ter corpo de requisição, então a biblioteca estaria passando um corpo de requisição de forma arbitrária... Nesse caso, não seria perfeitamente aceitável simplesmente implementar um método customizado no lado da própria biblioteca?

É difícil negar completamente a necessidade, mas, em comparação com PUT, PATCH e DELETE, que surgiram na transição do HTTP 1.0 para o 1.1, isso me parece menos convincente.

 
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. Na especificação padrão, o método GET não define nada sobre o body, mas em nenhum momento diz que ele não deve ser incluído.

  2. Como há casos em que frameworks de servidor não processam o body em requisições GET, a MDN recomenda não incluir body no método GET.

  3. O Elasticsearch oferece suporte a body no método GET.

 
vwjdalsgkv 2024-09-20

Acho que é preciso pensar um pouco mais antes de fazer a especificação mudar por causa da implementação da biblioteca.