Gimbusowa wyszukiwarka ;)

0

Coś takiego powtórzyło mi się już któryś raz: do naszej forumowej wyszukiwarki wpisałem sobie hasło gimbus. Jako wynik wyszukiwania dostaję coś takiego:

gimbus.png

Kod źródłowy strony:

<li ><b>gimbus</b>owie.pl</li><li ><b>gimbus</b>om wstÄp na 4p wzbroniony...</li>

Po odświeżeniu strony wszystko wraca do normy i jest wyświetlane normalne wyszukiwanie z wynikami...

Wygląda na to, że do przeglądarki zostały wysłane (jakim cudem) podpowiedzi z pola szukaj:

podpowiedzi.png

3

Zapewne sprawa Opery.
Opera robi coś takiego (podejrzewam, że większość, albo wszystkie przeglądarki tak robią), że jak otwierasz w tym samym czasie (tj. trwa jedno połączenie i tworzysz drugie) ten sam adres, bez danych POST - to połączenie otwiera tylko raz i tylko raz pobiera zawartość.
Wyszukiwarka używa identycznego adresu jak wyszukiwanie właściwe - różnica jest tylko w nagłówku X-Requested-With (tak Coyote rozpoznaje czy to jest request ajaxa).
Zapewne otworzyło się połączenie by pobrać podpowiedzi - pacnąłeś enter - Opera widzi - brak POST, taki adres jest już ładowany - to pokażemy mu identyczną treść jak poprzednie połączenie.
No, a że w całym tym rozwiązaniu nie przemyślano sprawy nagłówka X-Requested-With... chyba jakieś gimbusy to pisały ;)

2
dzek69 napisał(a):

...

IMO to nawet nie wina otwartego połączenia tylko cache'u, który dla tych samych parametrów GET próbował obyć się bez ponownego pobierania danych

Więc to bardziej błąd w coyote, niż w operze

user image

w nagłówku "Vary" powinno być wpisane "X-Requested-With" jeżeli odpowiedź zależy od tego nagłówka - to dość poważny błąd
w nagłówkach nie ma też nic dotyczącego cache'u

Nie powinno się w ogóle uzależniać odpowiedzi jedynie od nagłówka "X-Requested-With" ponieważ uniemożliwia to poprawne cache'owanie
Jeżeli różne dane są wysyłane pod tym samym adresem to są one wymazywane i zastępowane przy każdokrotnej zmianie tego nagłówka (dane nie są zapisywane niezależnie dla każdej z wersji nagłówka) - lepiej i łatwiej uzależnić odpowiedź od parametrów GET

Nie mówiąc o tym że niektóre, zwłaszcza starsze serwery proxy mogą w ogóle nie przepuszczać tego nagłówka, lub cache'ować odpowiedź niezależnie od nagłówków wypisanych w "Vary"

Nagłówek "X-Requested-With" powinno się wykorzystywać jedynie do ewentualnego odmówienia odpowiedzi, a nie do wykorzystania tego samego adresu do dwóch czynności

user image

dzek69 napisał(a):

No, a że w całym tym rozwiązaniu nie przemyślano sprawy nagłówka X-Requested-With... chyba jakieś gimbusy to pisały ;)

Jak widać - przemyślano. Trzeba tylko jeszcze o tym wiedzieć.
Opera też nie jest tu wprawdzie bez winy bo nie powinna używać cache'u jeśli nie ma o nim nagłówków, ale nagłówki mógł dorzucić przeźroczysty proxy na bramie Twojego ISP, lub po prostu Opera nagina zasady żeby dać złudzenie bycia trochę szybszą przeglądarką od innych

0

IMO to nawet nie wina otwartego połączenia tylko cache'u, który dla tych samych parametrów GET próbował obyć się bez ponownego pobierania danych

Wtedy taki błąd miałby każdy Operowiec po załadowaniu podpowiedzi. Chyba, że ktoś jak ja wyłącza cachowanie dokumentów (zezwalam na cache obrazków).
Ja wiem tyle, że w przypadku otwartego połączenia dzieje się jak opisałem - jestem użytkownikiem Opery od wersji 9, webdeveloperem - więc zdążyłem poznać parę mechanizmów ;) i ponieważ skoro nie było zmasowanego ataku użytkowników tej przeglądarki marudzących na niedziałającą szukajkę + @madmike raportuje, że to nie dzieje się zawsze i było już "kiedyś raz" - to wysuwam wniosek, że to jednak otwarte połączenie i identyczny request GET (tj. jak liczyć WSZYSTKIE nagłówki to nie identyczny) bez POST. Ale i tu mogę się mylić.

0
dzek69 napisał(a):

...i ponieważ skoro nie było zmasowanego ataku użytkowników tej przeglądarki marudzących na niedziałającą szukajkę + @madmike raportuje, że to nie dzieje się zawsze i było już "kiedyś raz"...

Tak jak napisałem, błąd się zdarza, mi się już co najmniej kilka razy powtórzył. Na pewno nie jest to nagminne, nawet nie umiem podać jakiegoś "przepisu" co zrobić, żeby się powtórzyło. Podejrzewam, że jeśli się komuś zdarzyło, to odświeżył stronę i po prostu zignorował ten błąd...

0
  1. prawie na pewno X-Requested-With jest niewystarczające

  2. przy całkiem prostym serwisie pamiętam że musiałem zrobić część lub całość tego:
    http://bookofzeus.com/articles/php-headers-with-ajax/

  3. dobrym pomysłem jest j.w. napisano podawanie specjalnych parametrów GET

0

Poprawione. Jest juz na SVN.

1 użytkowników online, w tym zalogowanych: 0, gości: 1