Skip to content

Ping requests reach the user defined middlewares #13109

@gtm-nayan

Description

@gtm-nayan

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

// 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

https://github.com/gtm-nayan/vite-ping-repro

Steps to reproduce

  1. Run pnpm install

  2. Run pnpm dev

  3. Open the page

  4. Turn off dev server

  5. Restart the dev server (ideally set a breakpoint on this line to avoid the clutter from unrelated requests)

  6. 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.5

Used Package Manager

pnpm

Logs

No response

Validations

Metadata

Metadata

Assignees

No one assigned

    Labels

    p2-nice-to-haveNot breaking anything but nice to have (priority)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions