diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2024-01-21 18:14:42 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-21 18:14:42 +0900 |
| commit | fb309f3d4f49b56464e3dd97d6540e092294baf2 (patch) | |
| tree | 8c83b65587c7c9057a83ee96e1befbb18d7cd19b /packages/backend | |
| parent | fix(frontend): MkHorizontalSwipeでメニューを閉じるのに2回クリ... (diff) | |
| download | sharkey-fb309f3d4f49b56464e3dd97d6540e092294baf2.tar.gz sharkey-fb309f3d4f49b56464e3dd97d6540e092294baf2.tar.bz2 sharkey-fb309f3d4f49b56464e3dd97d6540e092294baf2.zip | |
return a `Vary: Accept` header for all dual-format endpoints #365 (#13044)
`/users/:user`, `/@:user`, `/notes/:note` return different responses
depending on the request's `Accept:` header. If we don't consistently
return a `Vary: Accept` header, browsers and caching proxies will get
confused, and return AP representations when HTML was requested, or
vice versa.
Co-authored-by: dakkar <dakkar@thenautilus.net>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/backend')
| -rw-r--r-- | packages/backend/src/server/ActivityPubServerService.ts | 4 | ||||
| -rw-r--r-- | packages/backend/src/server/web/ClientServerService.ts | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/packages/backend/src/server/ActivityPubServerService.ts b/packages/backend/src/server/ActivityPubServerService.ts index 68e426b5bc..4fa6b8afee 100644 --- a/packages/backend/src/server/ActivityPubServerService.ts +++ b/packages/backend/src/server/ActivityPubServerService.ts @@ -648,6 +648,8 @@ export class ActivityPubServerService { }); fastify.get<{ Params: { user: string; } }>('/users/:user', { constraints: { apOrHtml: 'ap' } }, async (request, reply) => { + vary(reply.raw, 'Accept'); + const userId = request.params.user; const user = await this.usersRepository.findOneBy({ @@ -660,6 +662,8 @@ export class ActivityPubServerService { }); fastify.get<{ Params: { user: string; } }>('/@:user', { constraints: { apOrHtml: 'ap' } }, async (request, reply) => { + vary(reply.raw, 'Accept'); + const user = await this.usersRepository.findOneBy({ usernameLower: request.params.user.toLowerCase(), host: IsNull(), diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index 3e35d5415e..2de5156fec 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -476,6 +476,8 @@ export class ClientServerService { isSuspended: false, }); + vary(reply.raw, 'Accept'); + if (user != null) { const profile = await this.userProfilesRepository.findOneByOrFail({ userId: user.id }); const meta = await this.metaService.fetch(); @@ -515,6 +517,8 @@ export class ClientServerService { return; } + vary(reply.raw, 'Accept'); + reply.redirect(`/@${user.username}${ user.host == null ? '' : '@' + user.host}`); }); |