-
-
Notifications
You must be signed in to change notification settings - Fork 8k
Ping requests reach the user defined middlewares #13109
Description
Describe the bug
When the server shuts down, the client starts sending periodic ping requests to check if the server is back up and then reload. These requests reach the middlewares defined by the users but it should probably be handled by vite before it reaches any of these like the initial websocket upgrade request does. There is also no reliable way to identify these requests for the middlewares to ignore it themselves.
ref: sveltejs/kit#6910
ref: sveltejs/kit#7218
vite/packages/vite/src/client/client.ts
Lines 318 to 324 in c63ba3f
| // A fetch on a websocket URL will return a successful promise with status 400, | |
| // but will reject a networking error. | |
| // When running on middleware mode, it returns status 426, and an cors error happens if mode is not no-cors | |
| try { | |
| await fetch(`${pingHostProtocol}://${hostAndPath}`, { | |
| mode: 'no-cors', | |
| }) |
Here it uses the no-cors mode so custom headers won't be sent along, can't use that to identify the ping request, but that can be worked around by abusing the Accept header, something like
Accept: text/x-vite-ping and check that instead.
I could submit a PR, but can't tell which file would be responsible for intercepting it, is it ws.ts?
Reproduction
Steps to reproduce
-
Run pnpm install
-
Run pnpm dev
-
Open the page
-
Turn off dev server
-
Restart the dev server (ideally set a breakpoint on this line to avoid the clutter from unrelated requests)
-
Observe that the custom middleware from vite.config.js will have first logged the request URL from the ping request
System Info
npmPackages:
vite: ^4.3.5 => 4.3.5Used Package Manager
pnpm
Logs
No response
Validations
- Follow our Code of Conduct
- Read the Contributing Guidelines.
- Read the docs.
- Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
- Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to vuejs/core instead.
- Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
- The provided reproduction is a minimal reproducible example of the bug.