Hacker News new | ask | show | jobs
by tosti 6 hours ago
> using HTTP GET with a request body is a bad idea, as for example users behind a corporate firewall or a different browser may be unable to use your website.

So is using QUERY requests for quite some time from now.

3 comments

405 Method Not Allowed is trivial to fall back to POST. How do you know the GET request behaved incorrectly?
That's assuming the corporate proxy is well-behaved.
Then all bets are off, and I guess we just can’t HTTP ever again because a proxy can misbehave.

One should adhere to Best Practices since one cannot control every device between the app and the user. Best Practice says “GET has no body. QUERY can have a body. If QUERY fails (405), use POST with the body.” And eventually, enough proxies will behave well enough that at least the HTTP bit of the app has a chance of working.

Yeah, query seems just GET with a body. No difference in protocol nor behavior
The difference is the method. Query you're saying I can use body. GET you should never use body.
> The difference is the method. Query you're saying I can use body. GET you should never use body.

The biggest win is how intermediary boxes now have concrete guidance that a specific HTTP request is both safe, idempotent, and carries a request body. Up until now none of this existed, and at best developers could use unsafe methods to carry request bodies (see GraphQL and how it uses POST for queries)

There is the Accept-Query header https://www.rfc-editor.org/info/rfc10008/#appendix-A.3 that tells you can use QUERY. That's a bit different.
Except compatibility. If you're using classic GET and it's enough for you, you aren't affected.
What is compatible with a QUERY but not with a GET ?
Intermediate proxies, caches, CDNs, firewalls, and load balancers.
That is only in the case of GET with a body though.
Yes. That is the issue under discussion, e.g. not "classic GET".
The fact that some infrastructure is poorly maintained is not a reason against evolving protocols, it's a reason to maintain infrastructure better. It's really not that difficult to do.