2017-03-03 49 views
7

Próbuję zaznaczyć zasoby, które są przechowywane w pamięci podręcznej pracownika usługi.czy można zmodyfikować nagłówki odpowiedzi pamięci podręcznej usługi pracownika?

Pomyślałem, że można dodać niestandardowy nagłówek do zasobu, który mógłby to wskazać, ale wygląda na to, że modyfikacje nagłówka są usuwane po zapisaniu zasobu w pamięci podręcznej pracownika usługi. Czy tak jest? Nie widzę niczego w cache spec o modyfikowaniu nagłówków odpowiedzi.

Oto przykład tego, co próbowałem:

// I successfully cache a resource (confirmed in Dev Tools) 
caches.open('testCache').then(cache => { 
    cache.add('kitten.jpg'); 
}) 
.then(() => { 
    console.log('successfully cached image'); // logs as expected 
}); 

// placeholder 
var modifiedResponse; 

// get the cached resource 
caches.open('testCache') 
.then(cache => { 
    return cache.match('kitten.jpg'); 
}) 

// modify the resource's headers 
.then(response => { 
    modifiedResponse = response; 
    modifiedResponse.headers.append('x-new-header', 'test-value'); 
    // confirm that the header was modified 
    console.log(modifiedResponse.headers.get('x-new-header')); // logs 'test-value' 
    return caches.open('testCache'); 
}) 

// put the modified resource back into the cache 
.then((cache) => { 
    return cache.put('kitten.jpg', modifiedResponse); 
}) 

// get the modified resource back out again 
.then(() => { 
    return caches.match('kitten.jpg'); 
}) 

// the modifed header wasn't saved! 
.then(response => { 
    console.log(response.headers.get('x-new-header')); // logs null 
}); 

Próbowałem również usuwanie nagłówków niestandardowych, modyfikując istniejące nagłówki i utworzenie obiektu new Response() odpowiedzi zamiast chwytając istniejącego.

Edycja: używam Chrome 56.

+1

Byłoby to przydatne nazwa i wersja przeglądarki używanej podczas testów. – tony19

+0

@ tony19 Ach tak, dzięki. Używam Chrome 56. Zaktualizowałem to pytanie. –

Odpowiedz

4

Trzeba by stworzyć nową odpowiedź w tym celu:

fetch('./').then(response => { 
    console.log(new Map(response.headers)); 

    const newHeaders = new Headers(response.headers); 
    newHeaders.append('x-foo', 'bar'); 

    const anotherResponse = new Response(response.body, { 
    status: response.status, 
    statusText: response.statusText, 
    headers: newHeaders 
    }); 

    console.log(new Map(anotherResponse.headers)); 
}); 

Live demo (patrz konsola)