Using HTTP/2 Cleartext for a server in Go 1.24
L'application utilise des flux SSE longue durée (15 minutes) et rencontre un problème connu sur Google Cloud Run où les déconnexions clients ne sont pas propagées lorsque le backend communique en HTTP/1.1. Pour résoudre cela, l'auteur a exploré l'utilisation de HTTP/2 cleartext (h2c), que Cloud Run peut acheminer depuis son frontend TLS vers le service backend. Avant Go 1.24 il fallait utiliser golang.org/x/net/http2 et h2c.NewHandler avec une configuration relativement complexe, tandis qu'à partir de Go 1.24 on peut activer directement SetUnencryptedHTTP2 et SetHTTP1 sur http.Server. La configuration locale se vérifie avec curl --http2-prior-knowledge et la mise en production nécessite de déclarer le port h2c et d'ajuster timeout et concurrence dans la ressource Cloud Run (par exemple timeout = "900s" et max_instance_request_concurrency = 200). Aucun changement particulier du load balancer n'a été nécessaire car le frontend HTTPS négocie correctement HTTP/2 et les timeouts par défaut des backends serverless sont compatibles avec des connexions SSE longues.