2016-08-23 46 views

Odpowiedz

27

dostęp do nagłówków nieprzezroczysty Odpowiedzi/Ciało

Najprostszym ograniczenie wokół nieprzezroczystych odpowiedzi jest to, że nie można dostać sensowne informacje z powrotem większość properties klasy Response, jak headers lub zadzwoń różne methods które tworzą interfejs Body, np. json() lub text(). Jest to zgodne z naturą czarnej, nieprzejrzystej odpowiedzi.

Korzystanie Niejawnych Odpowiedzi jako zasoby na stronie

nieprzezroczyste reakcje mogą być wykorzystane jako źródło informacji na stronie internetowej, gdy przeglądarka pozwala na zasób cross-pochodzenie ma być używany. Oto podzbiór elementów, dla których zasoby przekroju pochodzenia, a do nich kryjące odpowiedzi są poprawne, zaadaptowany z Mozilla Developer Network documentation:

  • <script>
  • <link rel="stylesheet">
  • <img>, <video> i <audio>
  • <object> i <embed>

Znaczące przypadki użycia, dla których nieprzejrzyste odpowiedzi to , a nie ważne dla font resources.

Ogólnie, aby określić, czy można użyć nieprzejrzystej odpowiedzi jako szczególnego rodzaju zasobu na stronie, należy sprawdzić odpowiednią specyfikację. Na przykład, odpowiedź HTML specification explains, która jest krzyżowa (tj. Nieprzezroczysta), może być stosowana dla elementów <script>, ale z pewnymi ograniczeniami, aby zapobiec wyciekowi informacji o błędzie.

nieprzezroczyste Odpowiedzi & Storage API Cache

One "haczyka", że deweloper might run into z nieprzezroczystych odpowiedzi wymaga korzystania z nich przy Cache Storage API. Dwie informacje są istotne tło:

  • Właściwość nieprzezroczystej odpowiedzi status jest always set to 0, niezależnie od tego, czy oryginalny wniosek udało, czy nie.
  • Metody interfejsu Cache Storage API add()/addAll() będą odrzucane, jeśli odpowiedzi wynikające z któregokolwiek z żądań mają kod stanu, który nie znajduje się w 2XX range.

Z tych dwóch punktów wynika, że ​​jeśli wniosek wykonywane w ramach add()/addAll() wyników rozmów w nieprzezroczystej odpowiedzi, nie będą mogły być dodawane do pamięci podręcznej.

Można obejść to, wykonując jawnie fetch(), a następnie wywołując metodę put() z nieprzezroczystą odpowiedzią. W ten sposób skutecznie reagujesz na ryzyko, że buforowana odpowiedź może być błędem zwróconym przez serwer.

const request = new Request('https://third-party-no-cors.com/', {mode: 'no-cors'}); 
// Assume `cache` is an open instance of the Cache class. 
fetch(request).then(response => cache.put(request, response)); 

nieprzezroczyste Odpowiedzi & navigator.storage API

w celu uniknięcia wycieku informacji między domenami, istnieje znaczna wyściółka dodano do wielkości nieprzezroczystej odpowiedzi stosowano do obliczania granic przydziału składowania (tj. czy zgłoszony zostanie wyjątek QuotaExceeded) i zgłoszone przez navigator.storage API.

Szczegóły tego dopełnienia się różnić od przeglądarki do przeglądarki, ale dla Google Chrome, oznacza to, że minimum rozmiar pamięci podręcznej, że każdy pojedynczy nieprzezroczysty odpowiedź przyczynia się do ogólnego użycia pamięci jest approximately 7 megabytes. Należy o tym pamiętać, określając, ile nieprzezroczystych odpowiedzi ma być przechowywanych w pamięci podręcznej, ponieważ można znacznie przekroczyć limity miejsca na dysku znacznie wcześniej niż można by się tego spodziewać w oparciu o rzeczywisty rozmiar zasobów nieprzezroczystych.

+0

Świetna odpowiedź! Jak więc radzić sobie z czcionkami? [Zrzut ekranu DevTools] (http://take.ms/6s3vU) – mu3

+0

Otrzymałem odpowiedź pod adresem [googlechrome.github.io] (https://googlechrome.github.io/samples/service-worker/selective-caching/service- worker.js), zapomniałem sklonować żądanie. – mu3

+1

Cool. Cieszę się, że ta próbka też była przydatna! –