HTTP status codes / 3xx — Redirection

301 Moved Permanently

In one sentence

The resource lives at a new URL forever; update your links.

What it means

Permanent redirect. Browsers and search engines update their references, and caches remember it aggressively. Note the historical quirk: most clients change POST to GET when following a 301 (use 308 if the method must be preserved).

Common causes

Reproduce it in cURL

curl -i http://github.com/

Same request, no terminal: paste this into the cURL converter for native code, or straight into ReqPad on your phone.

How to debug it

An API that 301s your POST will usually cause the follow-up request to arrive as a GET without a body — if your client "loses" its payload after a redirect, this is why.

Server-side note: If POST bodies vanish after redirect: most clients turn 301-followed POSTs into GET. Use 308 server-side when the method must survive.

The fastest way to pin down a 301 is to reproduce the exact request and inspect what actually went over the wire — status, headers, timing and body, without your app code in the way. That is what an API client is for; ReqPad does it from your phone, with every request saved to history.

Related codes

300 Multiple Choices · 302 Found · 303 See Other · 304 Not Modified · 307 Temporary Redirect · 308 Permanent Redirect — or the full reference.

Reproduce that 301 in 10 seconds.

Build the request, send it, read status + headers + timing — on your iPhone. Free to start.