As the HTTP spec says for response codes 301 and 302:
Note: For historic reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 307 (Temporary Redirect) status code can be used instead
A third (but unlikely) possibility is you're getting a 303 response to the initial URI. The solution is twofold:
- Configure the clients which are under your control to POST to the canonical URI so they are not redirected at all.
- Configure your server to redirect using 307 in this case instead of 301/302.