LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Przegląd bloga /Tworzenie stron internetowych/Tutorials / Jaki format obrazu otrzymuje przeglądarka: kontrola wyboru...
Ten artykuł w innych językach:

Jaki format obrazu otrzymuje przeglądarka: kontrola wyboru formatu i pamięci podręcznej

Jaki format obrazu otrzymuje przeglądarka: kontrola wyboru formatu i pamięci podręcznejJaki format obrazu otrzymuje przeglądarka: kontrola wyboru formatu i pamięci podręcznej

Management Summary

Witryny mogą dostarczać ten sam obraz w różnych formatach dopasowanych do przeglądarki i oszczędzających transmisję. Pamięć podręczna musi rozdzielać warianty; instrukcja Vary wskazuje istotne różnice żądań. Historyczna próba dwudziestu stron wykazała odmienne formaty, lecz mieszane metody pobierania ograniczają wyjaśnienie przyczyn. Dobre obrazy na stronie wymagają też zarezerwowanego miejsca, odpowiedniego ładowania i opisów zwiększających dostępność treści.

Spis treści
  1. Co rzeczywiście zapisano w próbie
  2. Dokładniejsze porównanie
  3. Vary określa ponowne użycie odpowiedzi
  4. Potwierdzona lekcja z narzędzia
  5. Wymiary, ładowanie i tekst alternatywny
  6. Granice próby
  7. Porównanie jednego adresu z ograniczeniami pobierania
  8. Pytania i odpowiedzi
  9. Źródła

Serwer może dostarczać różne formaty obrazu pod tym samym adresem. Nagłówek żądania Accept określa preferowane typy mediów, a nagłówek odpowiedzi Vary pomaga pamięci cache wybrać pasującą zapisaną odpowiedź. Inny typ zawartości ani brak nagłówka nie dowodzą jednak błędnego wyświetlania obrazu.

Historyczna kontrola dwudziestu stron głównych z 6 września 2026 r. objęła 1345 wpisów obrazów i próbę 76 adresów. Zapisane wyniki pozostają przydatne, ale pierwotna interpretacja przeceniała metodę: implementacja porównywała żądanie GET z HEAD, a nie dwa poza tym jednakowe żądania GET. GET żąda nagłówków i treści odpowiedzi; HEAD żąda nagłówków bez treści odpowiedzi. Poniższy opis oddziela zapisane wartości od wniosków wymagających nowego, kontrolowanego testu.

Próba historyczna: dwadzieścia stron, 76 adresów obrazów, czternaście różnic typów w porównaniu GET/HEAD, 783 niepełne pary wymiarów.
Zapisane wyniki z 6 września 2026 r.; różne metody uniemożliwiają odrębny dowód wpływu Accept.

Co rzeczywiście zapisano w próbie

W czternastu z 76 par zadeklarowane typy mediów były różne. Sześć próbek New York Times wskazywało WebP wobec JPEG z Vary: Accept. Sześć próbek Zeit wskazywało WebP wobec JPEG bez zapisanej wartości Vary, a dwie próbki Onetu — AVIF wobec PNG również bez tej wartości. W pozostałych 62 parach zadeklarowany typ był taki sam. Nie oznacza to potwierdzenia identycznej zawartości plików.

Żądania różniły się zarówno metodą, jak i Accept. Ponadto żądanie alternatywne zawierało Accept: image/*. Taki zapis dopuszcza AVIF i WebP, więc nie odwzorowuje przeglądarki bez obsługi tych formatów. Czternaście różnic stanowi wskazówki do dalszej kontroli, a nie samodzielny dowód negocjacji na podstawie Accept. Zbiór zawiera podsumowania, bez obu plików odpowiedzi i kompletnych surowych nagłówków.

Dokładniejsze porównanie

Kontrolowane porównanie wymaga dwóch GET, tego samego adresu i jednakowych opcji poza Accept. Żądanie bazowe może jawnie wykluczyć AVIF i WebP przez q=0; zapis image/* nie wyklucza żadnego z tych formatów. Accept określa preferencje żądania. Zgodność faktycznej odpowiedzi nadal wymaga sprawdzenia.

Przydatne dane obejmują końcowy URL, status, zadeklarowany typ mediów, rzeczywisty format pliku, liczbę bajtów, skrót zawartości i pełne nagłówki. Jednakowy typ i długość nie dowodzą jednakowych bajtów. Różne bajty mogą także wynikać ze zmiany obrazu, działania CDN albo czasu pobrania. Powtórzenia oraz dostępna konfiguracja serwera pozwalają lepiej ustalić przyczynę.

Vary określa ponowne użycie odpowiedzi

Jeżeli odpowiedź dopuszczona do cache jest wybierana według Accept, Vary: Accept zwykle przekazuje to kryterium wyboru. Cache nie może po prostu ponownie użyć takiej odpowiedzi dla żądania z niepasującą wartością Accept. HTTP dopuszcza normalizację przy porównaniu wartości; oddzielna kopia dla każdej różnicy zapisu nie jest nieuniknionym wymogiem.

Możliwość przechowywania i ponownego użycia zależy również od dyrektyw cache, aktualności i konfiguracji. Brak Vary może powodować ryzyko niewłaściwego użycia odpowiedzi, ale historyczna próba nie wykazała faktycznie błędnej odpowiedzi CDN. Ograniczenia takie jak no-store i świadomie skonfigurowany klucz cache zmieniają ocenę. Vary: * uniemożliwia bezpośrednie ponowne użycie bez walidacji.

Kontrola wymaga porównania pełnych nazw nagłówków. Vary: Accept-Encoding dotyczy kodowania zawartości, a nie tego samego kryterium co Vary: Accept. Wyszukiwanie samego fragmentu accept może pomylić oba przypadki.

Potwierdzona lekcja z narzędzia

Starsza lokalna implementacja przekazywała żądany nagłówek w opcji accept. Wspólna biblioteka pobierania oczekuje opcji kopfzeilen. Porównanie tych plików źródłowych potwierdza niezgodność interfejsu: błędna opcja nie przekazywała żądanego nagłówka. Test powinien zatem sprawdzać wychodzące żądanie, a nie tylko symulowaną odpowiedź. Jednakowe odpowiedzi same w sobie nie wykluczają negocjacji.

Wymiary, ładowanie i tekst alternatywny

Zapisana analiza HTML wykazała 783 z 1345 wpisów z brakiem co najmniej jednego prawidłowego wymiaru liczbowego. Nie jest to liczba obrazów bez obu atrybutów. Sześć badanych stron miało prawidłowe wymiary przy każdym wykrytym obrazie. W przypadku Heise pełnej poprawnej pary brakowało przy 423 z 426 wpisów.

Odpowiednie width i height pomagają zarezerwować proporcje przed załadowaniem obrazu. Miejsce może również rezerwować CSS. Brak atrybutów oznacza więc punkt do sprawdzenia, a nie zmierzone przesunięcie układu. Cumulative Layout Shift mierzy, jak bardzo widoczna treść niespodziewanie przesuwa się na stronie. Pomiar wymaga obserwacji faktycznie wyświetlanej strony.

Liczba 762 także wynika z przybliżenia: wpisy te występują po pierwszych trzech obrazach w kodzie źródłowym i nie mają loading="lazy". Nie mierzono obszaru widocznego ani układu CSS. Kolejność w HTML nie dowodzi niewidoczności; ważny obraz widoczny od początku nie powinien ładować się później tylko z powodu czwartej pozycji w kodzie.

W 27 wpisach brakuje atrybutu alt. Puste alt="" może być właściwe dla obrazów czysto dekoracyjnych albo informacji już przedstawionych w sąsiednim tekście. O zasadności decyduje funkcja obrazu w kontekście. Obrazy informacyjne i funkcjonalne wymagają odpowiedniego dostępnego odpowiednika.

Granice próby

Narzędzie wybierało najwyżej sześć różnych adresów obrazów na stronę z wykrytego HTML. Nie obejmowało to wszystkich teł CSS, obrazów tworzonych skryptem ani wariantów responsywnych faktycznie wybieranych przez przeglądarkę. Sześć próbek nie dowodzi również zachowania całej usługi dostarczania obrazów.

Trzy rekordy nie zawierają wykrytych obrazów: Stack Overflow odpowiedział kodem 429, Allegro kodem 403, a zapisana odpowiedź Bund nie dała wpisów obrazów. Nie dowodzi to braku obrazów na tych stronach ani zależności dwóch stron od JavaScriptu. Odmowa lub ograniczenie dostępu opisuje konkretną próbę żądania, a nie pełną wizytę w przeglądarce.

Porównanie jednego adresu z ograniczeniami pobierania

Poniższy przykład Bash wymaga curl od wersji 8.4, file i GNU coreutils. Przykładowy adres jest symbolem zastępczym. Oba żądania używają GET, przekierowania pozostają przy HTTPS, a każde pobranie ma limit 10 MiB i 30 sekund. Wyniki pozostają w nowo utworzonym katalogu tymczasowym do analizy.

Shell
#!/usr/bin/env bash
set -euo pipefail
url='https://example.com/image.png'
out=$(mktemp -d)
printf 'Output: %s\n' "$out"
for variant in modern baseline; do
  if [ "$variant" = modern ]; then
    accept='image/avif,image/webp,image/jpeg,image/png;q=0.8,*/*;q=0'
  else
    accept='image/jpeg,image/png,image/avif;q=0,image/webp;q=0,*/*;q=0'
  fi
  curl --silent --show-error --fail --location \
    --proto '=https' --proto-redir '=https' --max-redirs 3 \
    --connect-timeout 10 --max-time 30 --max-filesize 10485760 \
    -H "Accept: $accept" -D "$out/$variant.headers" \
    -o "$out/$variant.body" \
    -w "$variant status=%{http_code} type=%{content_type} url=%{url_effective}\n" \
    "$url"
  file --mime-type "$out/$variant.body"
  wc -c < "$out/$variant.body"
  sha256sum "$out/$variant.body"
done
printf 'Full response headers: %s/*.headers\n' "$out"

Pliki nagłówków zawierają także odpowiedzi przekierowań. Znaczenie mają Vary, Cache-Control i ewentualny ETag ostatniej odpowiedzi, wraz z wypisanym statusem i końcowym URL. file pomaga rozpoznać format, ale nie zastępuje pełnego testu dekodowania obrazu. Przypisanie różnicy wyłącznie Accept wymaga powtórzeń.

Audytor dostarczania obrazów i negocjacji formatów stanowi punkt wyjścia do analizy całych stron. Implementacja sprawdzona dla tego artykułu nadal używa porównania GET/HEAD i przybliżenia według kolejności w kodzie. Wynik nie odpowiada więc przykładowi z dwoma GET. Kontrola Vary wyszukuje ponadto fragment tekstu, przez co może błędnie sklasyfikować Accept-Encoding. Te ograniczenia wymagają uwzględnienia przed uznaniem negocjacji lub błędu cache za potwierdzone.

Pytania i odpowiedzi

Czy nowoczesne formaty mogą mieć osobne adresy?

Tak. Element picture może udostępniać źródła z typami oraz zapasowy element img. Wybór przeglądarki uwzględnia również warunki mediów, kandydatów responsywnych i wymagania wyświetlania. Jeżeli każdy adres dostarcza stały skonfigurowany format, wybór między adresami unika zmienności formatu według Accept pod jednym URL. Inne przyczyny stosowania Vary mogą nadal istnieć.

Czy każdy obraz po pierwszych trzech wymaga lazy loading?

Nie. Znaczenie mają wyrenderowany układ i początkowy obszar widoczny. Obrazy położone niżej mogą korzystać z opóźnionego ładowania. Obrazy widoczne od początku, zwłaszcza prawdopodobny obraz Largest Contentful Paint, nie powinny być opóźniane na podstawie samej pozycji w kodzie.

Lukas Wójcik

Lukas Wójcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Masz pytanie lub pomysł na projekt internetowy? Napisz krótko, o co chodzi. Formularz korzysta z reCAPTCHA i formconfirmed do ochrony przed spamem.

Napisanie komentarza

Przypadki brzegowe pominięte w artykule i pytania o kod są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.

LUKASWOJCIK.COM · NEWSLETTER

Nowe pomysły w skrzynce

Nowe artykuły, praktyczne narzędzia i informacje o projektach.

Wybierz tematy (opcjonalnie)
Bez wyboru: wszystkie tematy.

Zapis wymaga potwierdzenia e-mailem. · Prywatność

Prywatność · Newsletter

Adres e-mail, język, wybrane tematy oraz daty zapisu i potwierdzenia są przechowywane w celu wysyłki newslettera. Wymagane jest potwierdzenie zapisu. Każda wiadomość zawiera link do natychmiastowej rezygnacji. Formconfirmed chroni formularz przed spamem. Brak śledzenia otwarć i kliknięć.

Pełna polityka prywatności ↗