Description
#998 was a discussion regarding the impact the SERVER_NAME
setting has on an application. IMO, there was consensus in that issue, including by @mitsuhiko, that SERVER_NAME
being used both in routing and in URL generation was problematic.
That issue was closed by #2635, which made a change regarding subdomain matching. However, IMO, it did not address the fundamental problem of SERVER_NAME
impacting two disparate mechanisms in Flask.
I found two additional issues since #998 that have attempted to point out the problem with SERVER_NAME
: #2813, #3465
In #2813, a minimal, complete, and verifiable example was requested and I have therefore prepared an example gist that demonstrates the problem.
The gist's third "currently impossible" test demonstrates that it's currently impossible to:
- Set
SERVER_NAME
so external URL generation works outside a request context with only an app context; and - Have the app respond properly to multiple host names.
My particular use case currently is that I need SERVER_NAME
set so external URLs will be created accurately in distributed tasks where no web request is present. Additionally, I need the app to respond to multiple host names 1) the canonical URL the public uses; and 2) the IP address based URL our load balancer uses for health checks.
IMO, SERVER_NAME
should be deprecated and two new settings should be created. One which affects external URL generation and a second that affects routing resolution.
The setting for the URL generation could be CANONICAL_URL
and, because its a URL, it could eliminate the need for url_for()
's _scheme
arg.
Thanks for your consideration.
- Python version: 3.12
- Flask version: 3.0.3