Evert Pot
evertpot.com · Personal blog · on HN since 2013
Evert Pot writes about web standards, HTTP and API design, authentication, RSS and developer tooling.
What HN saysHN commenters cite his posts on GET request bodies, Dropbox's POST API design and Firefox's RSS removal when discussing HTTP and API choices.
69HN people shared it
25linked it in comments
109stories submitted
3.8Kstory points
3 months agolast shared
2013people per year2026
Most-shared posts
- 1ECMAScript 4: The Missing Version9 people · 138 points · first shared 2020 · 45 comments on HN
- 2HTTP/2 Push is dead6 people · 369 points · first shared 2020 · 168 comments on HN
- 3JWT should not be your default for sessions5 people · 345 points · first shared 2021 · 230 comments on HN
- 4Firefox removes RSS support3 people · 265 points · first shared 2018 · 231 comments on HN
- 5Google's CardDAV server isn't standards compliant (2014)3 people · 243 points · first shared 2014 · 62 comments on HN
- 6Dropbox starts using POST, and why this is poor API design3 people · 154 points · first shared 2015 · 48 comments on HN
- 7Package managers should be immutable, distributed and decentralized3 people · 137 points · first shared 2016 · 61 comments on HN
- 8Building multi-step login forms that work well with password managers3 people · 14 points · first shared 2025 · discussion on HN
- 9Discovering features and information via HTTP OPTIONS3 people · 7 points · first shared 2024 · discussion on HN
- 10I wish JSON5 was more popular3 people · 5 points · first shared 2023 · 1 comments on HN
- 11Ten years on LinkedIn2 people · 336 points · first shared 2016 · 165 comments on HN
- 12PHP Sucks2 people · 260 points · first shared 2016 · 281 comments on HN
- 13HTTP/1.1 just got a major update2 people · 248 points · first shared 2014 · 73 comments on HN
- 14One Year in San Francisco as a Software Engineer2 people · 221 points · first shared 2019 · 263 comments on HN
- 15Performance Testing HTTP/1.1 vs. HTTP/2 vs. HTTP/2 and Server Push for REST APIs2 people · 198 points · first shared 2020 · 71 comments on HN
What HN people wrote when they linked it
treve · 2026-06-18
It's not a great idea. I wrote something a few years ago if it's interesting:
https://evertpot.com/get-request-bodies/
endymi0n · 2015-03-25
related: http://evertpot.com/dropbox-post-api/
Basically everything about the status quo is messed up.
JSON into parameters: bad.
JSON into request body: undefined with the GET method.
JSON into request body with POST: great, but we're not actually mutating anything, so it's bad practice and won't be cached by varnish/nginx + a barrage of other problems.
I really wish someone would take up on http://www.ietf.org/rfc/rfc3253 - like REPORT as an analogue to GET, just with a JSON request body. Hey, we as a community finally managed to get PUT and PATCH on track, why not this one?
jmholla · 2025-10-21
Here's the article in question. [0] I think runxiyu is correct.
The author delves a bit more into the issue.
> One of most obvious problems is that if you also tell curl to follow HTTP redirects (using -L or --location), the -X option will also be used on the redirected-to requests which may not at all be what the server asks for and the user expected. Dropping the -X will make curl adhere to what the server asks for. And if you want to alter what method to use in a redirect, curl already have dedicated options for that named --post301, --post302 and --post303!
Per the man page (`man 1 curl`),
> The method string you set with -X, --request will be used for all requests, which if you for example use -L, --location may cause unintended side-effects when curl does not change request method according to the HTTP 30x response codes - and similar.
`-d` and `--data` will appropriately change the headers of their requests. Funnily, `--post301` and `--post302` which have a similar effect as `-X POST` are RFC 7231 compliant, browsers just don't do that. [2][3] This is so ubiquitous that the error codes 307 and 308 were added to support the original behavior of repeating the request verbatim at the target address. Compare the following:
> nc -l -p 8080 -q 1 <<< $'HTTP/1.1 301 Moved Permanently\nLocation: http://localhost:8081\n\n' & nc -l -p 8081 -q 1 <<< $'HTTP/1.1 200 OK\nContent-Length: 0\n\n' & curl -L --data test localhost:8080; wait > nc -l -p 8080 -q 1 <<<…
kohanz · 2016-04-13
This blog post sums up my feelings on LinkedIn pretty well:
https://evertpot.com/10-years-of-linkedin/
My only issue is that I feel, as an independent contractor, I’m obligated to maximize my potential in acquiring new customers. I don’t yet have the luxury to shut down an entire channel for new leads, despite the fact that LinkedIn has actually done very little for me in that regard. On top of that LinkedIn has become so ubiquitous that it’s actually become a standard question during some interview processes to ask for my profile. I feel that “I don’t have one” because of “principles” is never a great opener when you just made a new connection with someone.
The only other real tangible benefit I get from it is knowing about job changes my friends have made. I'm in my mid-30s and most of my good friends from University are spread across the continent. I'm lucky if we talk to each other a few times a year. So having the ability to passively learn "Oh hey, Jonny is now at Google" is valuable to me because I now know I have good contact at Google.
Maxious · 2025-11-10
If you view an RSS or Atom feed in chrome today you just get a screen of xml eg. https://developer.wordpress.org/news/feed/
In the golden old days of 2018, browsers at least applied some styling https://evertpot.com/firefox-rss/
You can still manually apply styling using xslt https://www.cedricbonhomme.org/blog/index.xml
bravesoul2 · 2025-07-11
https://evertpot.com/http/404
Seems to work :)
Sorry bad joke.
zachrip · 2025-02-26
When typescript came out, you were seen as weird for wanting such a thing. I once had a VP of engineering dm me to tell me to stop discussing typescript in the company dev channel around 2015 (if you're reading this, that was a dick move). Nowadays you're kinda odd man out if you don't want types. So the idea of adding types even optional ones probably wouldn't have gone down well. The closest we ever came was es4 which of course never landed: https://evertpot.com/ecmascript-4-the-missing-version/
zeroq · 2025-02-25
Not at all.
AS1 was plain ES3.
movieclip._x or movieclip._alpha (as in position and alpha blending) were accessed by properties with underscore to denote that you were using accessors (getters/setters).
Internally properties like Object.prototype.__proto__ had two underscores to denote they were private.
In AS2 you had:
class Foo extends Bar implements Xyz { private foo public function set x (value : Number) : void { ... } public function get x () : Number { } AS2 was based on long forgotten ES4 specification [0]. Under the hood it was still, what we would call today, transpiled to ES3 bytecode, as it run basically on the same VM as AS1.
It's crazy to think it took us 10 years to reinvent the wheel with TypeScript.
AS3 was a complete rework, more akin to Java.
[0] https://evertpot.com/ecmascript-4-the-missing-version/
dugmartin · 2024-08-16
It was an extension to ES4 called E4X - it allowed inline xml along with a new xml data type. More info here: https://evertpot.com/ecmascript-4-the-missing-version/
matthews2 · 2024-05-31
HTTP/2 push is super dead: https://evertpot.com/http-2-push-is-dead/
chedabob · 2024-02-07
Ye Firefox had a reasonable viewer too.
https://evertpot.com/firefox-rss/
somehnguy · 2023-03-06
He'll probably bring this back, claim to have invented it, and ban/threaten to sue anyone who says otherwise: https://evertpot.com/http/420-enhance-your-calm
abdusco · 2021-09-01
Server push is deprecated.
- https://groups.google.com/a/chromium.org/g/blink-dev/c/K3rYLvmQUBY/m/v…
- https://evertpot.com/http-2-push-is-dead/
kilburn · 2021-06-27
I think you are speaking about HTTP push, which has been abandoned [1] (also discussed in HN [2]).
[1] https://evertpot.com/http-2-push-is-dead/
[2] https://news.ycombinator.com/item?id=25283971
prepperdev · 2021-01-13
Debian policy is very sane (no network access during build), but it does seem like modern software just assumes that the Internet is always available, and all dependencies (including transitive) are out there.
The assumption is a bit fragile, as proven by the the left-pad incident ([1]). I hope that whatever the outcome of the discussion in Debian will be, it would keep the basic policy in place: not relying on things outside of the immediate control during package builds.
1. https://evertpot.com/npm-revoke-breaks-the-build/
davedunkin · 2020-12-03
I hope browsers implement 103 early hints. I’d like to tell the browser to preload assets while the server is still working on the response, which may take a significant amount of time to determine if the response is 200, 401, or 404.
https://evertpot.com/http/103-early-hints
tylerhou · 2020-12-03
The blog post links to another one of their blog posts with a real world example for push: https://evertpot.com/h2-push-for-apis/
yoz · 2020-01-02
Fascinating work, thank you!
Possible issue: have I misread it, or is the explanation of HTTP/3's advantages entirely missing from this section[1]? It's in the section header, but HTTP/3 isn't mentioned again until "The perfect world"[2] and that section doesn't clarify how HTTP/3 matters to the discussion.
[1] https://evertpot.com/h2-parallelism/#http2-and-http3
[2] https://evertpot.com/h2-parallelism/#the-perfect-world
toomuchtodo · 2019-04-13
I pay for Monica, and use it heavily for managing personal relationships. Have an issue or PR open for the API docs deficiency you mention?
Also, keep in mind there are some pitfalls when using CardDav with Google Contacts.
https://evertpot.com/google-carddav-issues/
c_shu · 2017-11-21
like this one?
https://evertpot.com/npm-revoke-breaks-the-build/
yeukhon · 2016-07-19
https://evertpot.com/dropbox-post-api/
This discuss some option for the GET vs POST.
In Kibana, everything is done over GET as get parameters, and I find that extremely annoying and a poor design.
A lot of public APIs also don't honor or have any intentions in supporting or using PATCH. Most APIs I have worked with only use PUT for modification. Anything resembles "creation" is automatically a POST.
1337biz · 2016-03-07
Probably the main reason why the poster should better continue using LinkedIn:
https://evertpot.com/resume.html
404
File not found
edwintorok · 2014-06-16
Well HTTP/1.1 just got updated recently, without changing the version number:
http://evertpot.com/http-11-updated/
So there are updates needed from time-to-time, but I agree that running a small webserver shouldn't require constant updates to fix neverending security bugs.
Twisol · 2021-04-25
And there's something to be said for batching -- if instead of requesting each resource individually, you ask for all of them simultaneously, the backend can see that context and fetch that data more efficiently.
In something truly RESTful (with HATEOAS and media types and all that jazz), the links between resources are only discoverable dynamically, and the client traverses that resource graph interactively. As the article explains, that works a lot better when you aren't scared of the per-request network overhead. But it still fundamentally limits the amount of context provided to the server on each interaction, preventing the server from optimizing for each request beyond guessing and pre-fetching what it thinks a client will need. (And the pre-fetched data has to live somewhere, meaning you've just created a cache and all its concomitant issues.)
Taking GraphQL as an alternative, the resource graph is statically known -- you can effectively fetch the schema just once. You can then traverse through many resource relationships and fetch many disparate units of data in a single request, and the backend can see that structure and decide how to efficiently gather all of that data.
Even besides the interaction context, doing REST properly (instead of a faux-REST actually-RPC HTTP API) can be pretty challenging. How many REST APIs are founded on media types instead of statically-determined URLs and methods? [0] If you're just doing HTTP RPC, you more-than-likely have a…