diff --git a/src/client/scripts/stream.ts b/src/client/scripts/stream.ts
index 8a525ba0020f8553385b883f55b8e2fdec26448a..defb22af8ea1a5013d84be73c2e377fe011416c7 100644
--- a/src/client/scripts/stream.ts
+++ b/src/client/scripts/stream.ts
@@ -3,6 +3,7 @@ import { EventEmitter } from 'eventemitter3';
 import ReconnectingWebsocket from 'reconnecting-websocket';
 import { wsUrl } from '../config';
 import MiOS from '../mios';
+import { query as urlQuery } from '../../prelude/url';
 
 /**
  * Misskey stream connection
@@ -21,7 +22,12 @@ export default class Stream extends EventEmitter {
 
 		const user = os.store.state.i;
 
-		this.stream = new ReconnectingWebsocket(wsUrl + (user ? `?i=${user.token}` : ''), '', { minReconnectionDelay: 1 }); // https://github.com/pladaria/reconnecting-websocket/issues/91
+		const query = urlQuery({
+			i: user?.token,
+			_t: Date.now(),
+		});
+
+		this.stream = new ReconnectingWebsocket(`${wsUrl}?${query}`, '', { minReconnectionDelay: 1 }); // https://github.com/pladaria/reconnecting-websocket/issues/91
 		this.stream.addEventListener('open', this.onOpen);
 		this.stream.addEventListener('close', this.onClose);
 		this.stream.addEventListener('message', this.onMessage);
diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index 507ddac3cee9581db963e26844d2a7ccf2a6e70e..58e764ee17f41f0fb5918175502d7edaa1f03a04 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -358,6 +358,12 @@ router.get('/flush', async ctx => {
 	await ctx.render('flush');
 });
 
+// streamingに非WebSocketリクエストが来た場合にbase htmlをキャシュ付きで返すと、Proxy等でそのパスがキャッシュされておかしくなる
+router.get('/streaming', async ctx => {
+	ctx.status = 503;
+	ctx.set('Cache-Control', 'private, max-age=0');
+});
+
 // Render base html for all requests
 router.get('(.*)', async ctx => {
 	const meta = await fetchMeta();