<img src=... />
, a kiedy o sam obrazek, którego adres wpisany został bezpośrednio lub wywołany za pomocą linka? Czy da się odróżnić, kiedy ktoś osadza obrazek na swojej stronie, a kiedy tylko do niego linkuje?
Jedyną rzeczą, która mogłaby zawierać takie informacje jest zapytanie HTTP wysyłane przez przeglądarkę do serwera. We wstępnych badaniach wykluczyliśmy możliwość użycia nagłówka Referer do rozróżnienia zapytań - co prawda Referer przy elementach osadzonych ma zwykle wartość odpowiadającą osadzającej stronie, ale taki sam nagłówek uzyskamy klikając w link znajdujący się na takiej stronie. Z pozostałych nagłówków żaden nie ma na celu informować o rodzaju zapytania. Okazuje się jednak, że takie rozpoznanie jest możliwe - trzeba podejść do sprawy statystycznie. Podejrzenia dość szybko padły na nagłówek Accept...
Eksperyment, w którym w zeszłym tygodniu około 200 (+/-50) osób wzięło udział pozwolił mi zebrać trochę danych statystycznych. Obiektem zainteresowania było zapytanie HTTP wysyłane przez przeglądarkę przy próbie pobierania obrazka JPG i PNG celem osadzenia go na stronie (<img src=...) lub bezpośredniego wyświetlenia. W centrum zainteresowania znalazł się nagłówek Accept - jedyny, który okazuje się przenosić istotne dla nas informacje.
Wyniki
Nagłówek Accept pozwala przeglądarce określić, jakiego typu multimediów spodziewa się w odpowiedzi na swoje zapytanie. Okazuje się, że przeglądarki spodziewając się elementu do osadzenia na stronie często wysyłają w tym nagłówku inne typy, niż w przypadku obrazków pobieranych do wyświetlenia bezpośredniego. Spójrzmy na przykład na ten wykres dla przeglądarki Firefox:
![Wykres przedstawiający wyniki Eksperymentu dla przeglądarki Firefox.](old-blog/download/posts/eksperyment/firefox-450px.png)
![Wykres przedstawiający wyniki Eksperymentu dla przeglądarki Opera.](old-blog/download/posts/eksperyment/opera-450px.png)
![Wykres przedstawiający wyniki Eksperymentu dla przeglądarki Internet Explorer.](old-blog/download/posts/eksperyment/ie-450px.png)
image/pjpeg
, który w jednym zapytaniu potrafi wystąpić dwa razy obok siebie. Nie rozumiem przyczyn tego zjawiska, ale występuje w wersjach IE od 6 do 8. Ale obiecano mi już, że zostanie to zgłoszone do Microsoftu :).
![Wykres przedstawiający wyniki Eksperymentu dla przeglądarki Safari.](old-blog/download/posts/eksperyment/safari-450px.png)
![Wykres przedstawiający wyniki Eksperymentu dla przeglądarki Mozilla.](old-blog/download/posts/eksperyment/mozilla-450px.png)
![Wykres przedstawiający wyniki Eksperymentu dla przeglądarki Chrome.](old-blog/download/posts/eksperyment/chrome-450px.png)
![Wykres przedstawiający wyniki Eksperymentu dla nie sklasyfikowanych przeglądarek.](old-blog/download/posts/eksperyment/inne-450px.png)
![Wykres przedstawiający wyniki Eksperymentu zbiorczo dla wszystkich przeglądarek.](old-blog/download/posts/eksperyment/wszystkie-450px.png)
![Wykres przedstawiający przeglądarki, które wzięły udział w Eksperymencie.](old-blog/download/posts/eksperyment/przegladarki-450px.png)
- Lepsze sprawdzanie, czy ktoś nie hotlinkuje naszych zdjęć/obrazków - klasyczne używanie nagłówka Referer jest nieskuteczne i denerwujące dla osób korzystających z Google Images.
- Serwowanie różnej treści zależnie od rodzaju zapytania - chyba głównie dla zabawy :)
- Wybiórcze stosowanie przekierowań - serwowanie ramek maskujących adres w przypadku zapytania bezpośredniego oraz używanie np. przekierowania proxy w przypadku zapytań osadzonych.