2015-07-22 11 views
5

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.

+0

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

+0

@ 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

+0

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

Odpowiedz

1

należy ustawić jako dozwolony nagłówków również zaakceptować i upoważnienie

response.setHeader(
    "Access-Control-Allow-Headers", 
    "x-requested-with, accept, authorization" 
); 

również treść odpowiedzi na „Opcje” Żądanie powinno zostać puste (nie jest konieczne, rzeczywiście, ale nie ma sensu sprawa dla ciała w takiej odpowiedzi) i Content-length: powinno być 0 (zero)

należy pamiętać, że wniosek ten nie powinien być przekazany do aplikacji (można, ale nie trzeba)

+0

Dzięki @eicto, wypróbowałem to, ale niestety nagłówki nadal nie są wysyłane. Nie można uzyskać odpowiedzi, ponieważ samo żądanie jest odrzucane w Apache, ponieważ nie ma w nim nagłówków uwierzytelniania. – nnimis

+0

Nie powinieneś wymagać autoryzacji dla OPCJI –

+0

W rzeczywistości będą dwie prośby pierwsza - OPCJE i druga - GET –

Powiązane problemy