2016-10-21 17 views
6

Używam nagłówka ETag do buforowania, a przeglądarka wysyła odpowiedni nagłówek If-None-Match. Początkowo po prostu porównałem te nagłówki i zadziałało.Jakie są zastosowania If-None-Match z wieloma podmiotami?

Później przyszło mi do głowy, że rfc2616 zezwala na listę jednostek, więc to naprawiłem. Pytanie brzmi, czy poprawka zostanie kiedykolwiek ...

  • Czy przeglądarka kiedykolwiek wydać prośbę wraz z nagłówkiem zawierającym If-None-Match więcej niż jeden podmiot?
  • Czy istnieją inne zastosowania w świecie rzeczywistym?
+0

Można odwołać się do [RFC 7230] (https://tools.ietf.org/html/rfc7230) ff. 2616 jest już od jakiegoś czasu przestarzały. Problem nadal istnieje. Przyjrzę się temu później, brzmi interesująco :) – DaSourcerer

+0

Prawo nietoperza: Możliwe, że schematy wersjonowania, takie jak te używane przez WebDAV, wymagają tego. – DaSourcerer

Odpowiedz

1

Są dwa przypadki użycia, które mogę wymyślić: ujednolicenie przeglądarki i buforowanie znaczników encji proxy oraz niestandardowe wdrażanie pamięci podręcznej po stronie klienta.

Chociaż nigdy nie widziałem przeglądarki obsługującej żądanie z wieloma znacznikami encji w If-None-Match, istnieją proxy buforujące, które mogą mieć własną wersję żądanego zasobu. Mogą one zastąpić wartość If-None-Match wysłaną przez przeglądarkę z połączeniem znacznika encji zasobu wersji aplikacji i znacznika encji zasobu wersji proxy przed wysłaniem żądania do serwera. W ten sposób, jeśli serwer proxy ma świeżą wersję żądanego zasobu, można zmniejszyć obciążenie serwera, wyświetlając pełną odpowiedź (z obciążeniem ciała) z serwera proxy zamiast z serwera. Ten przypadek jest opisany przez RFC 7234 Hypertext Transfer Protocol (HTTP/1.1): Caching:

Kiedy cache postanawia revalidate własnych przechowywanych odpowiedzi na wniosek, który zawiera listę If-None-Match jednostki tagów, cache mogą łączyć otrzymane listy z listę znaczników encji z własnego zbioru zapisanych zestawów odpowiedzi (świeżych lub nieaktualnych) i wysłanie związku z dwóch list jako zastępczej wartości pola nagłówka If-None-Match w przesłanym żądaniu .

Nie mogę powiedzieć, czy wsparcie dla tej części RFC 7234 jest szerokie, ale z pewnością są też proxy, które ją wspierają. Sprawdź projekt Node.js Caching Reverse HTTP Proxy autorstwa Colina Mollenhoura.

Z drugiej strony możesz nie chcieć polegać na przeglądarce, aby wykonać żądanie warunkowe. Możesz ustawić wartość nagłówka HTTP If-None-Match samodzielnie, używając XMLHttpRequest.setRequestHeader(). Może to być przydatne, jeśli przechowujesz wiele wersji zasobu przy użyciu Web Storage API, Cache API lub innego mechanizmu. Odpowiedź serwera musi zawierać nagłówek HTTP ETag z znacznikiem entity. Ten znacznik entity wskazuje, która wersja zasobu jest uważana za nową.

0

Ostatnio dużo czytałem o mechanizmach buforujących i zadałem sobie to samo pytanie. Mogę wymyślić tylko przypadek użycia (oprócz wspomnianych Leonid), gdzie byłoby sens przechowywać i wysyłać wiele ETags: gdy ressource wycofuje.

Może to być przypadkowe, takie jak api, który obsługuje json, a podstawowe dane są często aktualizowane, w sposób, w jaki zostanie przywrócony do poprzedniej wersji.

Ale może też być według projektu, gdzie duży obiekt konfiguracyjny miałby tylko kilka różnych wersji, które można by bardzo często przełączać. (Częstotliwość, z jaką zostanie zmieniona, jest ważna, w przeciwnym razie buforowanie nie przyniesie dużej wartości).W takim przypadku pamięci podręczne będą zadowolone, że wszystkie dostępne wersje będą zawsze gotowe do wyświetlenia.

Wiem, że to długa szansa i nie mogę wymyślić żadnej realnej sytuacji, która pasowałaby do jednego z nich. Poza tym, rewalidacja i tak ssać, trafienia w pamięci podręcznej są drogą do zrobienia =)

Możesz również przeczytać this. Wygląda na to, że wszystkie pamięci podręczne przechowują tylko ostatni wysłany ETag (co jest zrozumiałe z oczywistych względów związanych z pamięcią).

Nadzieja to pomaga

Powiązane problemy