Skip to content

ci(repo): stop browsers caching the hosted web index.html - #1622

Merged
renefloor merged 1 commit into
v2from
ci/web-index-no-store
Nov 11, 2026
Merged

renefloor merged 1 commit into
v2from
ci/web-index-no-store

Conversation

@renefloor

Copy link
Copy Markdown
Contributor

Summary

Join links on flutter.getstream.io (e.g. /video/beta/join/<id>) sometimes open to a blank page.

Routes like /join/<id> aren't files in the bucket, so the load balancer serves index.html for them. When the browser revalidates its cached copy (If-None-Match), the fallback fetches index.html with that header, gets a 304, and rewrites it to 200 with an empty body. The browser stores the empty page, and every later revalidation returns the same thing.

curl -H 'If-None-Match: "<index.html etag>"' https://flutter.getstream.io/video/beta/join/<id>
→ 200, content-length: 0
curl -H 'If-None-Match: "<index.html etag>"' https://flutter.getstream.io/video/beta/
→ 304

A trailing / only seemed to help because the browser caches it as a different URL. The first visit works and a reload within 60 s goes blank.

Change

  • rsync leaves index.html out.
  • index.html is then uploaded on its own with Cache-Control: no-store, so browsers never store it and never send a conditional request for an app route. It is also uploaded last, after the assets it references.

Testing

  • After the next v2 deploy: curl -sI https://flutter.getstream.io/video/beta/index.html shows cache-control: no-store
  • Opening a join link, then reloading it, loads the app both times

The deployer service account needs to be able to overwrite index.html. rsync already overwrites objects, so it should.

🤖 Generated with Claude Code

Revalidating a cached app route on flutter.getstream.io returns an empty
200, which leaves join links blank on a second visit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@renefloor
renefloor requested a review from a team as a code owner November 11, 2026 12:40
@coderabbitai

coderabbitai Bot commented Nov 11, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 1749cd00-3aee-472a-bd94-b6e8c7de8df5

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@github-actions github-actions Bot added the v2 label Nov 11, 2026
@codecov

codecov Bot commented Nov 11, 2026

Copy link
Copy Markdown

Codecov Report

✔️ No coverage data to report, because files changed do not require tests or are set to ignore

@github-actions github-actions Bot added the approved Approved by a reviewer label Nov 11, 2026
@renefloor
renefloor merged commit 02ff203 into v2 Nov 11, 2026
31 checks passed
@renefloor
renefloor deleted the ci/web-index-no-store branch November 11, 2026 13:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Approved by a reviewer v2

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants