Anforderungsheader nicht von Service Worker gesendet
Ich versuche, einen Webdienst von einem Service Worker abzurufen. Dieser Dienst ist eine mit Apache-Basisauthentifizierung gesicherte JSP. Daher muss ich die Anmeldeinformationen für die Authentifizierung in den Anforderungsheadern angeben. Die folgende Anforderung funktioniert im Hauptfenster einwandfrei:
self.addEventListener('push', function(event) {
console.log('Received a push message', event);
event.waitUntil(
fetch(ONLINE_SITE_ENDPOINT, {
method: 'GET',
mode: 'cors',
headers: {
'Accept': 'application/json',
'Authorization': 'Basic btoa(auth info)'
}
}).then(function(response) {
//process response
}).catch(function(err) {
})
);
});
Dieser Code befindet sich in einem event.waitUntil () - Bereich, in einer Funktion, die von einem 'Push'-Ereignis-Listener aufgerufen wird. Derselbe exakte Anruf schlägt jedoch mit einem 401 (Unauthorized) fehl. In der Anzeige "Netzwerk" der Entwicklertools wird angezeigt, dass die Header nicht gesendet werden:
OPTIONS /latest-new.jsp HTTP/1.1
Host: {an accessible host}
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36
Access-Control-Request-Headers: accept, authorization
Accept: */*
Referer: http://localhost/service-worker.js
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Fehlt hier etwas? oder kann es einfach nicht von einem Servicemitarbeiter erreicht werden?
Einige zusätzliche Informationen: XMLHttpRequest kann nicht verwendet werden, da es im Servicearbeiter-Bereich "Nicht definiert" ist. Die Header in der JSP vor dem Abrufen des JSON:
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
AKTUALISIEREN Auf jeden Fall liegt etwas an den Authentifizierungs-Headern der Servicemitarbeiter, da die Anforderungen an nicht gesicherte URLs nicht fehlschlagen. Der gleiche Dienst ohne Apache-Autorisierung funktioniert wie erwartet.