7

Mam stronę internetową, która zwraca następujący nagłówek kiedy dostęp do materiału:Przestawianie wartości „Cache-Control” w odpowiedzi HTTP

HTTP/1.1 200 OK 
Date: Sat, 29 Jun 2013 15:57:25 GMT 
Server: Apache 
Content-Length: 2247515 
Cache-Control: no-cache, no-store, must-revalidate, max-age=-1 
Pragma: no-cache, no-store 
Expires: -1 
Connection: close 

Korzystanie rozszerzenie do Chrome, chcę zmodyfikować ten response header tak że materiał jest rzeczywiście buforowany zamiast marnować przepustowość.

Mam następujący przykładowy kod:

chrome.webRequest.onHeadersReceived.addListener(function(details) 
    { 
     // Delete the required elements 
     removeHeader(details.responseHeaders, 'pragma'); 
     removeHeader(details.responseHeaders, 'expires'); 

     // Modify cache-control 
     updateHeader(details.responseHeaders, 'cache-control', 'max-age=3600;') 

     console.log(details.url); 
     console.log(details.responseHeaders); 

     return{responseHeaders: details.responseHeaders}; 
    }, 
    {urls: ["<all_urls>"]}, ['blocking', 'responseHeaders'] 
); 

Które poprawnie modyfikuje nagłówek do czegoś takiego (na podstawie console.log (wyjście)):

HTTP/1.1 200 OK 
Date: Sat, 29 Jun 2013 15:57:25 GMT 
Server: Apache 
Content-Length: 2247515 
Cache-Control: max-age=3600 
Connection: close 

ale w oparciu o wszystkim Próbowałem to sprawdzić, nie widzę żadnych dowodów na to, że tak się stało:

  1. The cache nie zawiera wpisu do tego pliku
  2. Zakładka nie wykazuje żadnych zmian w odpowiedzi HTTP (próbowałem go zmienić nawet w przypadku niewielkich modyfikacji, aby upewnić się, że nie jest to błąd, ale wciąż bez zmian).

Jedyne realne wskazówki mogę znaleźć są co sugeruje, że moje podejście nadal działa i ten paragraf na webRequest API documentation co sugeruje, że to nie będzie działać (ale nie wyjaśnia, dlaczego nie mogę dostać żadnych zmian):

Należy zauważyć, że interfejs API żądania internetowego przedstawia abstrakcję stosu sieci dla rozszerzenia. Wewnętrznie, jedno żądanie URL można podzielić na kilka żądań HTTP (na przykład w celu pobrania pojedynczych zakresów bajtowych z dużego pliku) lub może być obsługiwane przez stos sieci bez konieczności komunikowania się z siecią . Z tego powodu interfejs API nie przesyła końcowych nagłówków HTTP wysyłanych do sieci przez . Dla przykładu, wszystkie nagłówki związane z buforowaniem są niewidoczne dla rozszerzenia .

Nic nie działa (w ogóle nie mogę zmodyfikować HTTP response header), więc myślę, że to moja pierwsza sprawa.

Jakieś sugestie na temat tego, gdzie mógłbym pójść źle lub jak znaleźć informacje o tym, co się tutaj dzieje?

Jeśli nie jest to możliwe, czy istnieją inne sposoby osiągnięcia tego, co próbuję osiągnąć?

Odpowiedz

5

Niedawno spędziłem kilka godzin na próby uzyskania buforowany plik, i odkrył, że chrome.webRequest i chrome.declarativeWebRequest API nie siła zasoby mają być buforowane. W żaden sposób.

Nagłówki odpowiedzi Cache-Control (i inne) można zmienić, ale będą one widoczne tylko w metodzie getResponseHeader. Nie w zachowaniu pamięci podręcznej.

+0

Niestety to, czego się spodziewałem ... Czy znasz jakieś inne sposoby zmuszenia tych plików do przechowywania w pamięci podręcznej?Znalazłem serwery proxy takie jak 'squid' ale wydaje mi się, że dużo błądzę z siecią w moim systemie tylko po to, aby cache'ować pliki z jednej konkretnej witryny –

+0

@BT Wybierz swój ulubiony serwer proxy, który dodaje właściwe nagłówki i użyj [' chrome .proxy'] (https://developer.chrome.com/extensions/proxy.html) API, aby skierować tę konkretną witrynę przez serwer proxy. –

+0

Naprawdę szkoda, że ​​nie można modyfikować buforowania z rozszerzenia. Czyniłoby to o wiele bardziej pomocnym, gdybyś mógł. –

Powiązane problemy