ServiceWorker file (sw.js) at domain root level is not being loaded

Hi!

I’m having problems loading /sw.js file at root level domain in my vite + vue project.

This url in production does not work: www.domain.com/sw.js it redirects to
www.domain.com/sw.js BUT as if the sw.js was an actual path. It shows my vue 404 page.

My netlify config is:

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

[[headers]]
  for = "/manifest.webmanifest"
  [headers.values]
    Content-Type = "application/manifest+json"
    
[[headers]]
  # Define which paths this specific [[headers]] block will cover.
  for = "/*"
    [headers.values]
    Access-Control-Allow-Origin = "*"
[[plugins]]
package = "/netlify/prebuild"

I already verified, and the /sw.js file is in the /dist folder.
image

Hey @davidboom,

What site is this regarding?

Hi! Is:
no-sw-example.netlify.app

Hi, @davidboom. The asset is working when I test:

$ curl https://no-sw-example.netlify.app/sw.js
if(!self.define){let s,e={};const l=(l,i)=>(l=new URL(l+".js",i).href,e[l]||new Promise((e=>{if("document"in self){const s=document.createElement("script");s.src=l,s.onload=e,document.head.appendChild(s)}else s=l,importScripts(l),e()})).then((()=>{let s=e[l];if(!s)throw new Error(`Module ${l} didn’t register its module`);return s})));self.define=(i,n)=>{const r=s||("document"in self?document.currentScript.src:"")||location.href;if(e[r])return;let u={};const a=s=>l(s,r),t={module:{uri:r},exports:u,require:a};e[r]=Promise.all(i.map((s=>t[s]||a(s)))).then((s=>(n(...s),u)))}}define(["./workbox-178644a4"],(function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"assets/_...all_.522656d7.js",revision:null},{url:"assets/_emailShapeId_.a96e4440.js",revision:null},{url:"assets/_flowId_.b09ad398.css",revision:null},{url:"assets/_flowId_.cd8066be.js",revision:null},{url:"assets/_flowId_.tokens.e2bf138b.js",revision:null},{url:"assets/_segmentId_.49e5a4f6.js",revision:null},{url:"assets/_smsShapeId_.4255e00b.js",revision:null},{url:"assets/404.40854a5c.js",revision:null},{url:"assets/active.7c6d9f14.css",revision:null},{url:"assets/active.93e9341d.js",revision:null},{url:"assets/activity.986b0372.js",revision:null},{url:"assets/AdminContextProvider.1e656503.css",revision:null},{url:"assets/AdminContextProvider.37b1f098.js",revision:null},{url:"assets/alert.fc8be166.js",revision:null},{url:"assets/angle-down.4f58e140.js",revision:null},{url:"assets/angle-left.d71ed457.js",revision:null},{url:"assets/angle-right.bd58d4af.js",revision:null},{url:"assets/app-embed.b985a4b9.js",revision:null},{url:"assets/archive.bfdc630f.js",revision:null},{url:"assets/arrow-left.06f13bbf.js",revision:null},{url:"assets/Badge.b7ae2ea5.js",revision:null},{url:"assets/banner.3d377176.js",revision:null},{url:"assets/calender.6b331118.js",revision:null},{url:"assets/check-circle.9f8ac7e9.js",revision:null},{url:"assets/clock.52065b83.js",revision:null},{url:"assets/CollapseItem.0597d0f8.js",revision:null},{url:"assets/comment-alt-message.6087800f.js",revision:null},{url:"assets/ContactListModal.cd097dff.js",revision:null},{url:"assets/content.e5fa066f.js",revision:null},{url:"assets/custom-events.1c5124a9.css",revision:null},{url:"assets/custom-events.f4a1b783.js",revision:null},{url:"assets/DataTable.45e0d4e2.js",revision:null},{url:"assets/DatePicker.a9c514fc.js",revision:null},{url:"assets/dice-two.419afc90.js",revision:null},{url:"assets/DynamicTags.98ab9889.js",revision:null},{url:"assets/edit.6b4276eb.js",revision:null},{url:"assets/EditEmailShape.e8061b2d.css",revision:null},{url:"assets/EditEmailShape.e9aba6b3.js",revision:null},{url:"assets/Editor.5621751c.css",revision:null},{url:"assets/Editor.c8c01c7f.js",revision:null},{url:"assets/EditSmsShape.9cd77e1d.css",revision:null},{url:"assets/EditSmsShape.c9b47a60.js",revision:null},{url:"assets/editStepRouter.78e74202.js",revision:null},{url:"assets/email-templates.18d2e178.js",revision:null},{url:"assets/email-verification.ab57bd02.js",revision:null},{url:"assets/email.9f83d269.js",revision:null},{url:"assets/email.ff661a45.css",revision:null},{url:"assets/empty.68e18b12.js",revision:null},{url:"assets/EmptyStateWrapper.70feec13.js",revision:null},{url:"assets/envelope-edit.6933b035.js",revision:null},{url:"assets/envelope.1a56f585.js",revision:null},{url:"assets/envelopes.7af314c0.js",revision:null},{url:"assets/exclamation-triangle.8a3cd333.js",revision:null},{url:"assets/ExportContactsModal.07cf66c4.js",revision:null},{url:"assets/eye.9d5911a2.js",revision:null},{url:"assets/fixing.7123d556.js",revision:null},{url:"assets/Forward.260ef414.js",revision:null},{url:"assets/get-slot.0ef7580c.js",revision:null},{url:"assets/HelpSection.9516df0d.js",revision:null},{url:"assets/HelpSection.ed7d9205.css",revision:null},{url:"assets/identifierLabels.d9eda9af.js",revision:null},{url:"assets/iframe.b40c8066.css",revision:null},{url:"assets/iframe.e70d88a3.js",revision:null},{url:"assets/index.39d3fced.js",revision:null},{url:"assets/index.4134d99b.js",revision:null},{url:"assets/index.44168c14.js",revision:null},{url:"assets/index.4ac85054.js",revision:null},{url:"assets/index.54ccd280.css",revision:null},{url:"assets/index.59dd4d1d.js",revision:null},{url:"assets/index.5f6c5bfc.js",revision:null},{url:"assets/index.68e26889.css",revision:null},{url:"assets/index.6a55d2b5.js",revision:null},{url:"assets/index.6f67a4a3.js",revision:null},{url:"assets/index.71a915c0.css",revision:null},{url:"assets/index.8cd3bcb0.css",revision:null},{url:"assets/index.8e0eca93.css",revision:null},{url:"assets/index.94c23bd2.js",revision:null},{url:"assets/index.9566ec7b.css",revision:null},{url:"assets/index.96e32afd.css",revision:null},{url:"assets/index.a52ae023.js",revision:null},{url:"assets/index.b48e0c48.css",revision:null},{url:"assets/index.b6152bd0.js",revision:null},{url:"assets/index.b64b6079.css",revision:null},{url:"assets/index.ba739bb5.css",revision:null},{url:"assets/index.bc856c56.js",revision:null},{url:"assets/index.bfa30a5b.js",revision:null},{url:"assets/index.c52b67c3.js",revision:null},{url:"assets/index.c85d134c.js",revision:null},{url:"assets/index.d07eec16.js",revision:null},{url:"assets/index.d9acf035.js",revision:null},{url:"assets/index.dd7ece9b.js",revision:null},{url:"assets/index.dde82d2f.css",revision:null},{url:"assets/index.ecff8f5d.css",revision:null},{url:"assets/index.f99f48a9.css",revision:null},{url:"assets/index.fe507861.js",revision:null},{url:"assets/library.14dd6a6c.js",revision:null},{url:"assets/Library.54de1c13.css",revision:null},{url:"assets/library.55588789.css",revision:null},{url:"assets/Library.fbec3cac.js",revision:null},{url:"assets/list-ul.52edb13a.js",revision:null},{url:"assets/List.2beb8c94.css",revision:null},{url:"assets/List.d87f87d0.js",revision:null},{url:"assets/ListItem.988d4523.js",revision:null},{url:"assets/metrics.b6a1ce5e.js",revision:null},{url:"assets/metrics.bebc5a3b.css",revision:null},{url:"assets/MixedLibrary.4e8ced6c.js",revision:null},{url:"assets/MixedLibrary.50a53afb.css",revision:null},{url:"assets/my-templates.55e43db3.js",revision:null},{url:"assets/MyTemplatesList.70da0957.js",revision:null},{url:"assets/PageMessagesProvider.3444cad1.js",revision:null},{url:"assets/phone-verification.2cc9467f.js",revision:null},{url:"assets/PhonePreview.061e835f.js",revision:null},{url:"assets/plugin-vue_export-helper.21dcd24c.js",revision:null},{url:"assets/README.629eb272.js",revision:null},{url:"assets/review.49cb0a72.css",revision:null},{url:"assets/review.c6c7aa4d.js",revision:null},{url:"assets/schedule.0d0dc3b8.js",revision:null},{url:"assets/schedule.fefe0cc1.css",revision:null},{url:"assets/SegmentInformation.6198574c.css",revision:null},{url:"assets/SegmentInformation.aeb15d37.js",revision:null},{url:"assets/Segments.33ce3ed6.css",revision:null},{url:"assets/Segments.b038e0ba.js",revision:null},{url:"assets/SegmentsForm.bf7ea8b9.js",revision:null},{url:"assets/SegmentsForm.ee77cf20.css",revision:null},{url:"assets/sent.7b25cc36.js",revision:null},{url:"assets/sms-templates.9584563b.js",revision:null},{url:"assets/sms.477c24fd.css",revision:null},{url:"assets/sms.6c9e44c0.js",revision:null},{url:"assets/StepsMinimap.588ae58d.js",revision:null},{url:"assets/StepsMinimap.d1b12e35.css",revision:null},{url:"assets/store.0177f957.js",revision:null},{url:"assets/store.01fe276b.js",revision:null},{url:"assets/store.203f8226.js",revision:null},{url:"assets/store.71ad00f0.js",revision:null},{url:"assets/store.91509536.js",revision:null},{url:"assets/store.aa478b3e.js",revision:null},{url:"assets/store.f6ee602f.js",revision:null},{url:"assets/store.fae42ab2.js",revision:null},{url:"assets/Switch.470d7369.js",revision:null},{url:"assets/template-library.e5811f97.js",revision:null},{url:"assets/times.be44b032.js",revision:null},{url:"assets/trash.13ae9869.js",revision:null},{url:"assets/unauthorized.214b385b.js",revision:null},{url:"assets/unauthorized.272cfe22.css",revision:null},{url:"assets/use-dialog.1a3d43fa.js",revision:null},{url:"assets/useAdminContext.14cce357.js",revision:null},{url:"assets/useBreakpoints.89fe861f.js",revision:null},{url:"assets/useCampaignEditContext.2380fe0d.js",revision:null},{url:"assets/useCampaignMetrics.c5da0b10.js",revision:null},{url:"assets/useCampaignStateActions.9c017a2d.js",revision:null},{url:"assets/useImageUploader.3db16e22.js",revision:null},{url:"assets/useJsonProps.852fa1ce.js",revision:null},{url:"assets/usePaginatedContacts.0bbcdd7c.js",revision:null},{url:"assets/usePaginatedContacts.471dac95.css",revision:null},{url:"assets/vue.runtime.esm-bundler.7063ae59.js",revision:null},{url:"assets/vue3-markdown-it.umd.min.adcd08ed.js",revision:null},{url:"index.html",revision:"cc0bce795aa6b0710fa9ec789752ffb5"},{url:"favicon.svg",revision:"1d8f19db07b239faa4c63a872cfecb70"},{url:"robots.txt",revision:"5e0bd1c281a62a380d7a948085bfe2d1"},{url:"safari-pinned-tab.svg",revision:"5eaf74d1c43d30e0af743b68a3f48504"},{url:"pwa-192x192.png",revision:"cf15322bece482325fb57dd9941dc03c"},{url:"pwa-512x512.png",revision:"c611139224d33546cd0c39ed18fc76ae"},{url:"manifest.webmanifest",revision:"0539ac34524325a411a04b0a50b01011"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html")))}));
//# sourceMappingURL=sw.js.map

If you are seeing something different, would you please share the x-nf-request-id header for the incorrect response (that header or the information it replaces as covered in this support guide)?

If you have already fixed this on your own, please feel free to share that solution here. If there are other questions about this, please let us know.

Yep, I see the exact same response from the terminal.
I discovered this error because a lot of clients are having problems getting this sw.js file.


If you try to enter to the url thru browser address bar, it redirects using netlify rules

Hi, @davidboom. The URL does not redirect from in the browser address bar when I test. If you see that happening, please make a HAR recording (or send us the x-nf-request-id HTTP response header for the 301/302 response).

You can post that information publicly or you can private message (PM) that to one of our support staff. I’ve confirmed that PMs are enabled for your forum login. Please keep in mind that only one person can see the PM and this will likely mean a slower reply than posting the information publicly. Please feel free to reply to however you prefer though.

x-nf-request-id:
01G5HP8KYBXD4CMJMN1WK1BM88

I’m noticing that:
soft-refresh: redirects domain.com/sw.js to vue page
hard-refresh: Delivers /sw.js file properly

Hi, @davidboom. That request id isn’t for the path /sw.js. In the URL requested for that x-nf-request-id the path was /assets/_...all_.b2a7d218.js and our system responded with a 200 response. (The referrer did have the /sw.js in its path but the request above was not for that path.)

I also show the same IP address which made that request above for /assets/_...all_.b2a7d218.js did make a request for the path /sw.js for the same scheme and domain name about 200 ms before this (the two timestamps are 1655229927.165 for /sw.js and 1655229927.371 for /assets/_...all_.b2a7d218.js which is a 206 ms difference).

The earlier request for /sw.js returned the header x-nf-request-id: 01G5HP8KQXW0YT7AMA909STQXJ and our system did respond with a 200 response to that request as well.

So far, I see zero failures server-side and I cannot reproduce any errors in any testing. This indicates to me that this is an issue in the client side code and not at Netlify.

If there are other questions about this, please let us know.