Skip to content

Allow the caching of the /versions and /auth_metadata endpoints#19530

Merged
sandhose merged 8 commits intodevelopfrom
quenting/cache-public-infos
Mar 12, 2026
Merged

Allow the caching of the /versions and /auth_metadata endpoints#19530
sandhose merged 8 commits intodevelopfrom
quenting/cache-public-infos

Conversation

@sandhose
Copy link
Copy Markdown
Member

@sandhose sandhose commented Mar 5, 2026

Can be reviewed commit by commit.

This sets caching headers on the /versions and /auth_metadata endpoints to:

  • allow clients to cache the response for up to 10 minutes (max-age=600)
  • allow proxies to cache the response for up to an hour (s-maxage=3600)
  • make proxies serve stale response for up to an hour (s-maxage=3600) but make them refresh their response after 10 minutes (stale-while-revalidate=600) so that we always have a snappy response to client, but also have fresh responses most of the time
  • only cache the response for unauthenticated requests on /versions (Vary: Authorization)

I'm not too worried about the 1h TTL on the proxy side, as with the stale-while-revalidate directive, one just needs to do two requests after 10 minutes to get a fresh response from the cache.

The reason we want this, is that clients usually load this right away, leading to a lot of traffic from people just loading the Element Web login screen with the default config. This is currently routed to client_readers on matrix.org (and ESS) which can be overwhelmed for other reasons, leading to slow response times on those endpoints (3s+).

Overwhelmed workers shouldn't prevent people from logging in, and shouldn't result in a long loading spinner in clients. This PR allows caching proxies (like Cloudflare) to publicly cache the unauthenticated response of those two endpoints and make it load quicker, reducing server load as well.

@sandhose sandhose marked this pull request as ready for review March 5, 2026 14:47
@sandhose sandhose requested a review from a team as a code owner March 5, 2026 14:47
@MadLittleMods MadLittleMods requested a review from a team March 5, 2026 22:08
Comment on lines +52 to +54
# This endpoint is unauthenticated and the response only depends on
# the upstream OIDC provider metadata, so it can be cached.
request.setHeader(b"Cache-Control", b"public, max-age=600, s-maxage=3600")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be cached based on what the upstream OIDC provider tells us it should be cached for (their cache headers)?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally yes? But this is (always) MAS, and we control MAS, so we can assume it's MAS. The comment is misleading though, correcting that in e8cb1d20c2

@sandhose sandhose added the Z-Deployed-On-Morg This PR has been deployed on matrix.org, so we must either merge it soon or roll it back label Mar 12, 2026
@sandhose sandhose requested a review from MadLittleMods March 12, 2026 15:48
@sandhose sandhose enabled auto-merge (squash) March 12, 2026 16:02
@sandhose sandhose merged commit 4c475dc into develop Mar 12, 2026
79 of 81 checks passed
@sandhose sandhose deleted the quenting/cache-public-infos branch March 12, 2026 17:11
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Mar 24, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [element-hq/synapse](https://github.com/element-hq/synapse) | minor | `v1.149.1` → `v1.150.0` |

---

### Release Notes

<details>
<summary>element-hq/synapse (element-hq/synapse)</summary>

### [`v1.150.0`](https://github.com/element-hq/synapse/releases/tag/v1.150.0)

[Compare Source](element-hq/synapse@v1.149.1...v1.150.0)

### Synapse 1.150.0 (2026-03-24)

No significant changes since 1.150.0rc1.

### Synapse 1.150.0rc1 (2026-03-17)

#### Features

- Add experimental support for the [MSC4370](matrix-org/matrix-spec-proposals#4370) Federation API `GET /extremities` endpoint. ([#&#8203;19314](element-hq/synapse#19314))
- [MSC4140: Cancellable delayed events](matrix-org/matrix-spec-proposals#4140): When persisting a delayed event to the timeline, include its `delay_id` in the event's `unsigned` section in `/sync` responses to the event sender. ([#&#8203;19479](element-hq/synapse#19479))
- Expose [MSC4354 Sticky Events](matrix-org/matrix-spec-proposals#4354) over the legacy (v3) /sync API. ([#&#8203;19487](element-hq/synapse#19487))
- When Matrix Authentication Service (MAS) integration is enabled, allow MAS to set the user locked status in Synapse. ([#&#8203;19554](element-hq/synapse#19554))

#### Bugfixes

- Fix `Build and push complement image` CI job pointing to non-existent image. ([#&#8203;19523](element-hq/synapse#19523))
- Fix a bug introduced in v1.26.0 that caused deactivated, erased users to not be removed from the user directory. ([#&#8203;19542](element-hq/synapse#19542))

#### Improved Documentation

- In the Admin API documentation, always express path parameters as `/<param>` instead of as `/$param`. ([#&#8203;19307](element-hq/synapse#19307))
- Update docs to clarify `outbound_federation_restricted_to` can also be used with the [Secure Border Gateway (SBG)](https://element.io/en/server-suite/secure-border-gateways). ([#&#8203;19517](element-hq/synapse#19517))
- Unify Complement developer docs. ([#&#8203;19518](element-hq/synapse#19518))

#### Internal Changes

- Put membership updates in a background resumable task when changing the avatar or the display name. ([#&#8203;19311](element-hq/synapse#19311))
- Add in-repo Complement test to sanity check Synapse version matches git checkout (testing what we think we are). ([#&#8203;19476](element-hq/synapse#19476))
- Migrate `dev` dependencies to [PEP 735](https://peps.python.org/pep-0735/) dependency groups. ([#&#8203;19490](element-hq/synapse#19490))
- Remove the optional `systemd-python` dependency and the `systemd` extra on the `synapse` package. ([#&#8203;19491](element-hq/synapse#19491))
- Avoid re-computing the event ID when cloning events. ([#&#8203;19527](element-hq/synapse#19527))
- Allow caching of the `/versions` and `/auth_metadata` public endpoints. ([#&#8203;19530](element-hq/synapse#19530))
- Add a few labels to the number groupings in the `Processed request` logs. ([#&#8203;19548](element-hq/synapse#19548))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My44NC4yIiwidXBkYXRlZEluVmVyIjoiNDMuODQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/5040
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net>
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Login A-Social Login Z-Deployed-On-Morg This PR has been deployed on matrix.org, so we must either merge it soon or roll it back

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants