[FIXED] Flask redirects POST requests automatically to GET requests but only in the cloud

Issue

You have created a Flask API using Flask RESTX. I’ve run it locally in a container and it’s working as expected. My endpoint is waiting for POST requests:

class MyAPIEndpoint(Resource):
    Def post (self):
        return hello
 

It’s very simple. When I run my Flask app on Google Cloud Run (it doesn’t matter if I use gunicorn or unsafe app.run() directly), I get a “405 Method Not Allowed” message. I can see in the console that the request was redirected to a GET request, which I didn’t allow in the endpoint above.

Logs:

POST 308 1.04KB 5ms PostmanRuntime/7.31.0 /myendpoint
POST 302 0B 0ms PostmanRuntime/7.31.0 /myendpoint
GET 405 735B 3ms PostmanRuntime/7.31.0 /myendpoint
 

As you can see, the request has been redirected. I don’t understand why you are doing this. I haven’t changed the docker image I’m using locally.
A Google Cloud Run Service deployment has no non-default configuration.
Interestingly, the login and admin pages (built with Flask Admin) work fine.

Does anyone know what’s going on?

Edit: I think Flask itself triggers the 308 redirect. This is to log the 308 to the infolog channel. Then there are other log messages like the one above. I lost all my post data in the redirect as I can also see in the logs that the body was dropped.

Solution

It was a Google Cloud Run problem – I had to create an API gateway to enable API functionality.

Answered By – Standard

Answer Checked By – Laura B. (Easybugfix Admin)

Leave a Reply

(*) Required, Your email will not be published