- Source
- RFC 9110, sections 15.1 and 15.4.2
A 301 says the thing you asked for has a new permanent address, and the Location header says where. It can be cached by default, so a client may skip the old address altogether next time. That's lovely until you need to change your mind, because you can't reach into everybody's cache and take it back.
The lost trousers are real too, in a sense. For historical reasons, a client may change a POST into a GET when it follows a 301, and your request body doesn't come along. If you need the method kept, 308 is the code for that, and it would have saved the trousers. The transporter chief would like it known that this has never happened before.