async def healths(request):
r = HttpResponseRedirect("/")
r.headers["x-hello"] = "world"
return r
> curl -vvv http://127.0.0.1:8080/healths
* Trying 127.0.0.1:8080...
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /healths HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.86.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< date: Thu, 09 Feb 2023 08:22:33 GMT
< server: uvicorn
< content-type: text/html; charset=utf-8
< location: /
< x-hello: world
< x-frame-options: DENY
< content-length: 0
< x-content-type-options: nosniff
< referrer-policy: same-origin
< cross-origin-opener-policy: same-origin
<
* Connection #0 to host 127.0.0.1 left intact
Чем дальше думать, тем более нерешаемая задача получается. Например, у gunicorn есть опция requests=N, которая перезапускает воркера (тред в случае gthread и процесс в случае sync). Новый воркер — это новый ID или всё ещё прежний? Или, например, k8s, когда перебрасывает контейнер спустя сутки после выкатки (по сути — выключает на одной ноде и спинапит на другой) — это всё ещё старый ID или уже новый? А если не перебрасывает, а просто рестартует, потому что сеть лаганула и хэлсчеки пропали?
Хотя нет, вопрос скорее в том, зачем изначально это понадобилось, возможно всё намного проще, а вопрос — всего лишь задача XY и, например, можно задачу решить просто тем, что при билде образа, класть файл .releaseid внутрь с short sha коммита (что конечно далеко не ID запуска [хотя что вообще такое этот ID запуска? может быть, revision в терминах helm?], но, возможно, именно хэш состояния кодовой базы подойдёт лучше [например для sentry release])