diff --git a/aio/content/guide/service-worker-config.md b/aio/content/guide/service-worker-config.md index ed33174d6de3e..693c7327ef39a 100644 --- a/aio/content/guide/service-worker-config.md +++ b/aio/content/guide/service-worker-config.md @@ -376,6 +376,7 @@ This optional section enables you to specify a custom list of URLs that will be The ServiceWorker redirects navigation requests that don't match any `asset` or `data` group to the specified [index file](#index-file). A request is considered to be a navigation request if: +* Its [method](https://developer.mozilla.org/docs/Web/API/Request/method) is `GET` * Its [mode](https://developer.mozilla.org/docs/Web/API/Request/mode) is `navigation` * It accepts a `text/html` response as determined by the value of the `Accept` header * Its URL matches the following criteria: diff --git a/packages/service-worker/worker/src/app-version.ts b/packages/service-worker/worker/src/app-version.ts index 1981c4b0068da..8cc7e8634e753 100644 --- a/packages/service-worker/worker/src/app-version.ts +++ b/packages/service-worker/worker/src/app-version.ts @@ -203,10 +203,10 @@ export class AppVersion implements UpdateSource { /** * Determine whether the request is a navigation request. - * Takes into account: Request mode, `Accept` header, `navigationUrls` patterns. + * Takes into account: Request method and mode, `Accept` header, `navigationUrls` patterns. */ isNavigationRequest(req: Request): boolean { - if (req.mode !== 'navigate') { + if (req.method !== 'GET' || req.mode !== 'navigate') { return false; } diff --git a/packages/service-worker/worker/test/happy_spec.ts b/packages/service-worker/worker/test/happy_spec.ts index 9308e38a2e2e8..a31d764abeed5 100644 --- a/packages/service-worker/worker/test/happy_spec.ts +++ b/packages/service-worker/worker/test/happy_spec.ts @@ -1704,6 +1704,14 @@ describe('Driver', () => { server.assertNoOtherRequests(); }); + it('does not redirect to index on a non-GET request', async () => { + expect(await navRequest('/baz', {method: 'POST'})).toBeNull(); + server.assertSawRequestFor('/baz'); + + expect(await navRequest('/qux', {method: 'PUT'})).toBeNull(); + server.assertSawRequestFor('/qux'); + }); + it('does not redirect to index on a non-navigation request', async () => { expect(await navRequest('/baz', {mode: undefined})).toBeNull(); server.assertSawRequestFor('/baz');