Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
Already on GitHub? Sign in to your account
net/http: remove support for status code 418 I'm a Teapot #21326
Comments
ALTree
changed the title from
418 I'm a Teapot to net/http: remove support for status code 418 I'm a Teapot
Aug 6, 2017
ALTree
added the
NeedsDecision
label
Aug 6, 2017
ALTree
added this to the
Go1.10
milestone
Aug 6, 2017
@ALTree: This should probably be a Go 2 proposal, |
bradleyfalzon
commented
Aug 6, 2017
It could still get a |
xtuc
commented
Aug 6, 2017
•
Yes, that's right but it looks like there many implementations of the HTCPCP. I think it's ok to break them in a major release of Go since it's not really part of the HTTP specification. Flexibility is the key here, if users needs to support the 418 status code for some reason, they should be able to extends the Go stdlib. Edit: @bradleyfalzon could Go emit a warning at compile time to warn the user about that? |
bradleyfalzon
commented
Aug 6, 2017
I'll be terse as I don't want to litter this issue, I'm referring to the standard deprecated notices documented https://blog.golang.org/godoc-documenting-go-code 3rd party tools already do check this such as https://staticcheck.io/docs/staticcheck |
@zegl Yes, removing the 418 constant would break the go1 compat promise... but since it appears to be a joke (is it?) I'll leave to others to decide if it would be fine to remove it. That's why I didn't (yet) tag it as go2. |
Doing some git digging... It was added in 5fb82d8 We can remove it from Go 2. I have another proposal somewhere to hide stuff (symbols, packages) from docs without removing it from the API. This might be a candidate of a thing to hide from docs but keep for compatibility. |
mnot
commented
Aug 7, 2017
SGTM, thanks. |
rsc
added Go2 NeedsFix
labels
Aug 7, 2017
gopherbot
removed the
NeedsDecision
label
Aug 7, 2017
foconnor-DS
referenced this issue
in whatwg/xhr
Aug 9, 2017
Open
Web compat implications of making getAllResponseHeaders lowercase #146
birjolaxew
commented
Aug 10, 2017
•
I would be saddened to see 418 removed. It's a fun bit of flavor that does no harm, and is a neat little easter egg to stumble upon - I feel it would be a shame to smother it. Going by the reactions to the related Node issue, it appears I am not the only one. |
tabacco
commented
Aug 10, 2017
Why bother? It's amusing, and doesn't hurt anything. |
ALTree
modified the milestone: Unplanned, Go1.10
Aug 10, 2017
romellem
commented
Aug 10, 2017
Just to be clear, is your argument that when/if the 400 block runs out, we'll want that one extra code available to stretch out the usefulness of the 400 block just a bit further? Unless I'm reading it incorrectly, the 400 block of HTTP status codes has more than 50 codes available. With the available "space" of the 400 block at more than 50%, this might be a pre-mature optimization for a problem that may never occur (400 block running out of available codes, that is). Not trying to sound harsh, but I for one like fun little easter eggs that you find throughout a programming career. To me, it shows that everything that goes on to make a computer actually do work is still made by humans, and keeping small slices of that human element is nice (in my opinion). Your argument is sound and logical, but this requested change ever so slightly lowers the "fun-ness" of Go (and potentially NodeJS) in the spirit of engineering robustness. At the end of the day, I have to say I don't think that tradeoff is worth it. (I appreciate the history lesson though! I always thought |
mnot
commented
Aug 10, 2017
We have a history of people squatting on HTTP status codes, and they're a scarce resource. The registry is the mechanism we use to coordinate their semantics and assure interoperability, and this status code is not registered. I'm all for Easter eggs in headers (effectively infinite space), body content, etc. Putting a joke in a status code isn't a big deal right now, but it sets a precedent of treating this space carelessly, and considering what we hope the lifetime of HTTP will be, it's a concern. Also, we have a chance of getting rid of this now; when it comes down to that last status code, it'll be far too embedded to get rid of (the resistance we see now will be 100x greater). |
irth
commented
Aug 10, 2017
•
I propose removing it from |
snikch
commented
Aug 10, 2017
Perhaps we should just register |
birjolaxew
commented
Aug 10, 2017
@mnot I would challenge this claim. If your fear is that 418 will gain widespread adoption, I think you're a little late; 418 was introduced in 1998, 19 years ago. Quite the opposite - once HTTP codes start becoming a scarce resource, the value of having a joke code will not be worth taking up a code for. |
mnot
commented
Aug 10, 2017
@birjolaxew I think lots of implementations have included it because they someone thought it was relevant, and they took a pull request without checking. As a proportion of traffic / applications / requests / whatever other metric you choose, it's basically unused for the defined semantics. |
daenney
commented
Aug 10, 2017
•
How is it a scarce resource with over 50% of the space still available? Considering it's taken 19 years to get to the current point I very much doubt that claim. No one seems to be in any need or hurry to introduce additional codes either, and definitely not another 82 of them just in the 4xx range. Unless there's some RFC that we haven't seen yet?
Fair enough. Lets just register it then.
That precedent was set 19 years ago. It hasn't caused much of a problem yet. Why the sudden
418 is already in use. Removing it now from Go, or NodeJS, while not removing it from Java, Python, Ruby, and a whole bunch of others does nothing to solve this problem. If you'd like to get rid of 418, submit an RFC and have it ratified that declares that no standards compliant implementation may return 418 in the teapot sense.
Based on which numbers and what research did you conclude this? And why does this matter for a harmless joke? |
mnot commentedAug 6, 2017
Go HTTP implements the 418 I'm a Teapot status code in go/src/net/http/status.go.
Its reference is RFC7168, but really came from RFC2324, Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0). Note the title - HTCPCP/1.0 is not HTTP/1.x.
HTCPCP was an April 1 joke by Larry to illustrate how people were abusing HTTP in various ways. Ironically, it's not being used to abuse HTTP itself -- people are implementing parts of HTCPCP in their HTTP stacks.
Node's support for the HTCPCP 418 I'm a Teapot status code (see nodejs/node#14644) has been used as an argument in the HTTP Working Group to preclude use of 418 in HTTP for real-world purposes.
While we have a number of spare 4xx HTTP status codes that are unregistered now, the semantics of HTTP are something that (hopefully) are going to last for a long time, so one day we may need this code point.
Please consider removing support for 418 from Go HTTP, since it's not a HTTP status code (even by its own definition). I know it's amusing, I know that a few people have knocked up implementations for fun, but it shouldn't pollute the core protocol; folks can extend Go easily enough if they want to play with non-standard semantics.
Thanks,
/cc @bradfitz