From d187373fd3b8f3aa16af8998f4e6481bb4505e60 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Fri, 16 Mar 2018 14:47:34 +0100 Subject: Use JSON-encoded POST body for /raw --- swayback/static/sw.js | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'swayback/static/sw.js') diff --git a/swayback/static/sw.js b/swayback/static/sw.js index f3a63db..56889c0 100644 --- a/swayback/static/sw.js +++ b/swayback/static/sw.js @@ -3,13 +3,18 @@ self.addEventListener('install', function(event) { self.skipWaiting(); }); /* load stuff through service worker immediately? XXX: only debugging? */ -self.addEventListener('activate', event => { - event.waitUntil(clients.claim()); +self.addEventListener('activate', async function() { + if (self.registration.navigationPreload) { + // Enable navigation preloads! + await self.registration.navigationPreload.enable(); + } /*event => { + event.waitUntil(clients.claim());*/ }); self.addEventListener('fetch', function(event) { - console.log ('fetch event', event.request.url, event); - let url = new URL (event.request.url); + let origreq = event.request; + console.log ('fetch event', origreq.url, event); + let url = new URL (origreq.url); url.protocol = 'https:'; url.port = 443; url.hash = ''; @@ -17,10 +22,23 @@ self.addEventListener('fetch', function(event) { url.hostname = url.hostname.slice (0, url.hostname.length-'.swayback.localhost'.length); } console.log ('orig url', url); - let body = new FormData (); - body.append ('url', url); - body.append ('method', event.request.method); - let req = new Request ('http://swayback.localhost:5000/raw', {method: 'POST', body: body}); + /* should contain everything we cannot use in the actual request (i.e. url and method) */ + let body = { + 'url': url.href, + 'method': origreq.method, + }; + let headers = { + 'Content-Type': 'application/json', + }; + /* add a few well-known request headers */ + let origheaders = origreq.headers; + if (origheaders.has ('accept')) { + headers['Accept'] = origreq.headers.get ('accept'); + } + console.log ('sending', body, headers); + let req = new Request ('http://swayback.localhost:5000/raw', + {method: 'POST', body: JSON.stringify (body), headers: headers, + mode: 'cors'}); event.respondWith ( fetch(req) -- cgit v1.2.3