Issue
We have API's that are written in Flask application and by default flask only supports http 1.1 unless we use some reverse proxy like Nginx. I was experimenting to check if Classic Application Load balancer could act as a reverse proxy for our use cause so that we could directly use flask application on Gunicorn and then deploy it on a CloudRun. Then this CloudRun is used as a backend for a HTTPS Classic LoadBalancer.
When docker image was ran locally I could see that the API's were using http 1.1 protocol but when it was deployed on Load balancer I could see that it was using http 2 protocol. Then I checked the http resource from the Cloudrun instance and the API's were using http 2 protocol. How does this actually get converted from http1.1 to http2? Can someone help me understand this mechanism ?
Image 2 is deployed in HTTP Classic load balancer without CDN
Image 3 is deployed on CloudRun
Solution
HTTP 1.1 is not converted to HTTP 2. The client includes an upgrade header in the request. If the server supports HTTP 2, it responds with a “101 Switching” status and then uses HTTP 2 on that connection.
More details are provided here.
Cloud Run HTTP 2 Details:
For Cloud Run services, Cloud Run by default downgrades HTTP/2 requests to HTTP/1 when those requests are sent to the container. If you want to explicitly set your service to use HTTP/2 end-to-end, with no such downgrading, you can configure it for HTTP/2.
Cloud Run: Using HTTP/2 (services)
Answered By - John Hanley
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.