Próbuję pobrać usługę sieci Web od pracownika serwisu. Ta usługa to strona JSP zabezpieczona podstawowym uwierzytelnianiem Apache, więc muszę podać poświadczenia do uwierzytelnienia w nagłówkach żądań. Poniższy wniosek współpracuje tylko z poziomu okna głównego:Nagłówki żądania nie wysłane z pracownika serwisowego
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) {
})
);
});
Ten kod jest w na event.waitUntil() zakres, w funkcji o nazwie z „push” słuchacza zdarzeń. Jednak to samo dokładne połączenie nie udaje się z 401 (nieautoryzowanym). Panel Sieć z narzędzi programistycznych pokazuje, że nagłówki nie są wysyłane:
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
Czy czegoś tu brakuje? lub po prostu nie można go uzyskać od pracownika serwisowego?
Kilka dodatkowych informacji: po prostu nie można użyć XMLHttpRequest, ponieważ jest "Nie zdefiniowany" w zakresie serwisowym. Nagłówki na JSP przed pobraniem 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");
UPDATE: pewno jest coś z nagłówkami uwierzytelniania z pracowników usług, ponieważ wnioski do niezabezpieczonych adresów URL nie zawiedzie. Ta sama usługa bez autoryzacji Apache działa zgodnie z oczekiwaniami.
nie rozumiem co oznacza Twój komentarz o 'XMLHttpRequest' jak to jest absolutnie obsługiwane webWorkers (patrz [Opis WebWorker na MDN] (https://developer.mozilla.org/en- US/docs/Web/API/Web_Workers_API/Using_web_workers) dla tego dokumentu). Czy możesz opublikować cały odpowiedni kod WebWorker? Musimy sprawdzić, gdzie coś jest nie tak i nie napisałeś wystarczająco dużo kodu tutaj. – jfriend00
@ jfriend00 właśnie zaktualizował kod, aby pokazać odbiorcę, kod procesu jest nieistotny (po prostu pokazuje powiadomienie z informacjami pobranymi do JSON). Nie wiem, dlaczego, jeśli próbuję zrobić "var xmlhttp = new XMLHttpRequest();" do pracownika WWW otrzymałem błąd "nie zdefiniowany". Poza robotem sieciowym działa dobrze. Google chrome 43.0.2357.134, ubuntu – nnimis
Przepraszam, ale nie wiem, co robią 'event.waitUntil()' lub 'fetch()', ponieważ nie są to funkcje standardowe (muszą pochodzić z jakiejś biblioteki). Mam nadzieję, że zobaczę kod, który faktycznie ustawia nagłówki, które według ciebie są nieobecne, i potrafisz śledzić na tyle przepływ, aby zobaczyć, jak żądanie jest formowane i wysyłane. Publikujesz tylko kod wyższego poziomu, który nie pokazuje żadnych szczegółów, w których problem prawdopodobnie występuje. – jfriend00