Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 16

Temat: "([a-z0-9]{3,5}\n)?" po nagłówku HTTP

  1. #1
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie "([a-z0-9]{3,5}\n)?" po nagłówku HTTP

    Temat ociera się o TCP/IP/Analiza/Badanie, nieco mniej o Bezpieczeństwo

    Chodzi mi o komunikacje HTTP, kiedy obieram z serwera pakiet, nagłowek HTTP (Host,Cookie,Referef,itp) kończy się przez "\n\n".
    W 50% przypadkach tuż po nim rozpoczyna się właściwa zawartość, (w 99% HTML).

    Jednak w drugiej połowie przypadków po \n\n widzę coś w stylu:

    ac95

    czy

    cd501

    geleranie: "([a-z0-9]{3,5}\n)?"

    jeśli wiecie co mam na myśli.

    Niby działa, tylko ze mnie to wkurza i chcuiałbym wiedzieć kiedy i dlaczego taki "PRYSZCZ" wyskakuje w moim przeklętym pakiecie HTTP.
    światło mądrości oświetla drogę z nikąd do nikąd

  2. #2
    Avatar rafal44
    rafal44 jest offline logout
    Zarejestrowany
    Dec 2007
    Postów
    291

    Domyślnie

    Bo w nagłówku pewnie jest Transfer-encoding: chunked. Co jest sposobem przysyłania danych. Poczytaj w RFC dotyczącym HTTP. Co do tej liczby, jest to informacja o tym ile bajtów zostanie przesłanych.
    http://pl.wikipedia.org/wiki/Lista_n...nsfer-Encoding
    http://tools.ietf.org/html/rfc2616
    "a imię jego będzie czterdzieści i cztery"
    A. Mickiewicz Dziady cz. III

  3. #3
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie

    Dzięki, dzięki,

    Może się czepam, ale czy nie dało się tego zrobić mądrzej niż tak ordynarnie "rozpiepszać" pakiet?

    Np, dodać kolejne pole w nagłowku:
    Stupid-hex: ac07
    dwa entery i jazda z payloadem...

    RFC czytać nie zamierzam, uważamn to za pójście na łątwiznę,
    poza tym podczas monotonnego czytania tego co w 99% wiem,
    towarzyszy mi niezbyt miłe uczucie masowego wymierania neuronów
    Ostatnio edytowane przez lame : 01-05-2010 - 19:05
    światło mądrości oświetla drogę z nikąd do nikąd

  4. #4
    Avatar rafal44
    rafal44 jest offline logout
    Zarejestrowany
    Dec 2007
    Postów
    291

    Domyślnie

    Dlaczego rozszczepienie pakietu? rozszczepiamy dane, a to potem jest rozszczepiane na paczki i na pakiety.
    Raczej nie wiem i nie domyślam się dlaczego tak jest, ale
    jest chyba nagłówek HTTP Accept-Transfer-Encoding: i nie pamiętam dokładnie jak działa.
    A odbiór jest łatwy, w RFC jest pseudokod usuwania tych hexów.
    Pozatym Transfer-Encoding może być gzip (chyba firefox tak działa) lub compress. Od dawna próbuje się zebrać aby to zaimplementować w swoiej bibliotece (bo nie jest to raczej potrzebne).
    "a imię jego będzie czterdzieści i cztery"
    A. Mickiewicz Dziady cz. III

  5. #5
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Nie trzeba tego implementowac samemu - jesli aplikacja generuje HTML a serwer ma wlaczone wsparcie dla kompresji, to jesli klient poda ze obsluguje kompresje to dostanie skompresowana odpowiedz :-)

    Aplikacja/biblioteka (jesli nie implementujesz serwera od zera) nie ma potrzeby wiedziec czegokolwiek o kompresji.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  6. #6
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie

    No właśnie pisze z php fsockopen i implementacja tego spoczywa na mnie.

    Jak to naprawić?
    światło mądrości oświetla drogę z nikąd do nikąd

  7. #7
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    ok - nie mam pytan... no moze jedno - po co sobie tak zycie utrudniac i implementowac serwer/klient w php kiedy sa juz gotowe i sprawdzone rozwiazania?

    Code reuse - to okreslenie ma potezna moc!
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  8. #8
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie

    Code reuse, oczywiście, święte słowa, jako ogólna zasada nie można się nie zgodzić.

    Jednak moją intencją jest załatwienie tego "w najlepszy możliwy sposób" i śpiesze wyjaśnić dlaczego wdrożenie gotowego rozwiązanie nie jest w tym konkretnym przypadku najlepszym wyjściem z sytuacji.

    Plusy:
    Popularna implementacja, małe ryzyko wystąpienia błędu.

    Minusy:
    Im więcej stosuje cudzego kodu, tym wieksza szansa że kiedyś nie będe w stanie znaleść wewnątrz tworzonych przez siebie apliakcjach każdego buga w mniej niż 30 sekund.
    Potencjalnie program będzie działał wolniej

    Zazwyczaj daje file_get_content(url), i dosteje czysty tekst, zadne kodowania, standardy, implementacje mnie nie instereuja, php robi wszystko za mnie.
    Jednakże w tym przypadku mam skrypt na 10 linii, który robi kokretną rzecz czyli "non-blocking http large-file download"
    stosując fsockopen() php tego nie implementuje, chce to załatwić jak najmnieszm nakładem kodu.
    Swiadom tego że moje rozwiązanie nie jest dobre, szukam lepszego.
    Może jest na to funkcja w jądrze php?
    Może przepisać program na fopen() z contexem?
    Może ustawić w zapytaniu jakiś nagłowek http?
    Może jest jakaś zaufana implementacja np. z PHP PEAR?

    // TQM
    Piszesz, że wystarczy gdy klient poda jakie kodowanie obsługuje, zatem czy można to załatwić prostym nagłowkiem http o nieznanym mi kluczu i wartosci?
    Ostatnio edytowane przez lame : 01-06-2010 - 10:20
    światło mądrości oświetla drogę z nikąd do nikąd

  9. #9
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Bardzo podoba mi sie taka odpowiedz - widac ze wiesz czego chcesz!

    No to do rzeczy - PHP dostarcza wiekszosc mechanizmow to fakt ale nie wiem czy dasz rade zrobic non-blocking socket (po prostu nie uzywam php od lat). Na pewno non-blocking potrafia obsluzyc serwery WWW do ktorych mozna wpiac PHP jako logike aplikacji i nie martwic sie w ogole o to jak dziala socket...

    Mowisz ze popularny kod mniej bledow ale Ty nie bedziesz mogl ich szybko znalezc - na to jest prosta metoda - uzywac nieco starszych wersji PHP niz te najnowsze, najbardziej wypasione. Z reszta jak system wejdzie w faze produkcyjna, kazda zmiana engine'u moze spowodowac katastrofe, wiec generalnie nalezy tego unikac choc trzeba rozsadnie latac software - tam gdzie trzeba, wtedy kiedy trzeba. Pisanie wlasnego kodu to moim zdaniem zle rozwiazanie jesli mozna tego uniknac stosujac gotowe elementy.
    Po pierwsze kod ktory napiszesz nie bedzie tak dokladnie sprawdzony jak ten ktory jest publiczny a po drugie watpie aby byl tak szybki jak kod ktory jest testowany przez tysiace ludzi, wiec... Twoj wybor - ja mam te same problemy do rozwiazania piszac swoje aplikacje i zaraz dojdziemy do tego do czego ja doszedlem u siebie.

    Za uzywaniem gotowych rozwiazan lub elementow przemawiaja nastepujace argumenty:
    - kod krotszy i bardziej przejrzysty, latwiejszy w utrzymaniu
    - jesli bedziesz mial kogos do pomocy pozniej (produkt sie rozrosl) to ciezko bedzie znalezc kogos kto bedzie biegly w temacie aby przejac Twoj kod, gotowe biblioteki to omijaja bo kazdy powinien je znac
    - moc obliczeniowa serwerow wzrasta w takim tepie, ze nawet teraz widzac jakies drobne opoznienia, za pol roku juz ich nie bedzie widac...
    - wiekszosc optymalizacji w aplkacji lezyw logice a nie w niskopoziomowych sprawach jak sockety - chcesz tutaj przyspieszyc, napisz ta czesc w C
    - czas potrzebny na stwozenie aplikacji od zera jest bez porownania dluzszy niz uzycie komponentow - przepisywanie serwera WWW to na prawde cos czego nie chcesz robic...
    - jesli nie zrobisz projektu na czas, zrobi go ktos inny... i nagle okaze sie ze Twoj pomysl na biznes jest tak fajny ze masz juz calkiem spora konkurencje :-)

    Na tej wlasnie podstawie po pol roku analiz w roznych warunkach itd doszedlem do wniosku ze napisze aplikacje w Perlu z uzyciem FastCGI i frameworku MVC, ogranicze do minimum uzycie bazy danych (tylko persistant storage), bede buforowal wyniki wiekszosci operacji aby zaoszczedzic czas CPU (lookup jest szybszy niz robienie 150 operacji kryptograficznych dla kazdego requestu), itp itd... a jak braknie mocy to postawie przed caloscia load-balancer i dodam kolejny serwer, bo gdy projekt bedzie generowal takie obciazenie, bedzie tez zarabial na tyle aby bylo mnie stac na dodanie kolejnej maszyny.

    Poslugujac sie tymi zasadami maszyna na procku Atom 330 (dual-core HT 1.6GHz - widoczne jako 4 CPU i tak dzialajace), 2GB RAM i powolny dysk IDE... obsluguje z baza danych (MySQL, 700MB w jednej tabeli) bez specjalnych optymalizacji, uzywajac Perl'a i dosc powiedzialbym ciezkawego MVC z na prawde ciezkawym ale poteznym mechanizmem szablonow (akurat taki mi odpowiadal w perspektywie tego co chce dodac pozniej) robiacy te kilkadziesiat operacju crypto dla kazdego requestu, itp itd... dosc rozbudowana logika :-) obsluguje bez problemu 460 zapytan na sekunde. Serwer WWW to apache i tez nie ma specjalnych tuningow zrobionych, na pewno dam rade wyciasnac wiecej. Problemem nie jest wiec dla mnie wydajnosc maszyny ale wydajnosc lacza, bo takie cos zajmuje prawie 7mbit/s w aktualnej postaci (skrocona odpowiedz serwera).

    Na zakonczene to co pisalem o naglowku - przegladarka podaje jakie dane akceptuje (gzip, deflate lub nic) i w takiej postaci serwer odpowiada jesli tylko moze, wiec jesli wsopolny mianownik to gzip albo bez, to polaczenie poleci gzip'em. Serwer tez kompresuje plik raz i trzyma skompresowany blob w pamieci (do pewnego rozmiaru oczywiscie) i jesli plik sie nie zmienia to nie jest ponownie kompresowany...

    Podsumowanie - nie mowie ze moje rozwiazanie jest idealne (bo nie jest - ciagle nad nim pracuje), nie mowie tez ze zadziala dla Ciebie. Przedstawilem powyzej tylko moj tok rozumowania i tego jak ja osobiscie mysle o tworzeniu aplikacji webowych i ich optymalizacji w kontekscie realiow biznesowych (bo dla mnie czasy tworzenia aplikacji dla zabawy raczej juz minely). Mam nadzieje, ze niektore argumenty rzuca nowe swiatlo na Twoja sytuacje i pomoga wybrac najlepsze rozwiazanie dla Twojego problemu.

    Dyskusja otwarta
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  10. #10
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie

    "PHP dostarcza wiekszosc mechanizmow to fakt ale nie wiem czy dasz rade zrobic non-blocking socket (po prostu nie uzywam php od lat)."
    Tak, dziala bez problemów, potwierdzam nonblocking z fsockopen(), php, 10 linii.

    "Mowisz ze popularny kod mniej bledow ale Ty nie bedziesz mogl ich szybko znalezc - na to jest prosta metoda - uzywac nieco starszych wersji PHP"
    Wybacz ale związku między błędami w gotowych bibliotekach a wersjami PHP nie widze,
    szereg błędów z jakimi się borytkam w cudzym kodzie pojawia się niezależnie od wersji PHP.

    To co robie jest z założenia bez sensu, ponieważ bez porządnego projektu nie ma sensu siadać do pisania.
    No ale cóż, urok pisania dla siebie, tego nie poprawie, po prostu realia są inne, gram z tym co mam, więc wole pisać wszystko sam i wiedzieć dokładnie co sie spiepszyło (z wyjątkiem samego jądra php)

    Uważam, że kod który z siebie wyrzucam niczym nie ustępuje temu który znajduje w uznanych publicznych bibliotekach,
    wiem samoocena, musisz mi zaufać na słowo.

    "wiekszosc optymalizacji w aplkacji lezy w logice a nie w niskopoziomowych sprawach jak sockety - chcesz tutaj przyspieszyc, napisz ta czesc w C"
    I znów, jako zasada jak najbardziej Tak,
    miestety to oprogramowanie musi działać na zwykłym serwerze LAMP.

    "moc obliczeniowa serwerow wzrasta w takim tepie, ze nawet teraz widzac jakies drobne opoznienia, za pol roku juz ich nie bedzie widac..."
    Tak z innej beczki, to też licze, że za 5-10 lat sprzęty przyśpieszą tak mocno, że ta cała optymalizacja skryptów przy trywialności obliczeń jakie wykonują powędruje między bajki.
    No chyba że pojawi się jakaś nowa technologia, w której żeby zrobić "coś podstawowego" potrzebny będzie sprzęt za 5 średnich krajowych.
    Cała zabawa zacznie się wtedy od poczatku


    "jesli nie zrobisz projektu na czas, zrobi go ktos inny... i nagle okaze sie ze Twoj pomysl na biznes jest tak fajny ze masz juz calkiem spora konkurencje :-)"
    Tworzenie aplikacji bez projektu (najczęsciej dla sibie) powoduje pojawianie się wielu problemów, jednym z nich jest efekt "końca nie widać".
    A tak, można by w kilku mądrych w spokoju usiąść, wysypać się z pomysłow, następnie napisać, skasować klienta, wakacje.
    Niestety sam dużego projektu (w sensie plan, zarys) nie usiąde i nie napisze , prędzej popadane w schizofrenie.


    "Tak ja myśle o tworzeniu aplikacji webowych i ich optymalizacji w kontekscie realiow biznesowych (bo dla mnie czasy tworzenia aplikacji dla zabawy raczej juz minely)."
    Dla mnie te czasu chyba właśnie mijają, coraz mniej obrawiam się swoich braków radząc sobie w taki czy inny sposób.
    Moralność nakazuje mi jednak oferować klientowi tylko nieskazitelną jakość, niestety, przy freelancingu jest to prakycznie niemożliwe, za dużo roboty.

    To co napisałem to również tylko mój tok myślenia w kooperacji z zasobami posiadanej wiedzy.

    Wracając do tematu, Nie wiem czy się rozumiemy, ta aplikacja to Client a nie Server, jaki nagłówek HTTP ustawić żeby nie było tych krzaków?

    Content-encoding: The-fuck\n ?
    Ostatnio edytowane przez lame : 01-06-2010 - 14:08
    światło mądrości oświetla drogę z nikąd do nikąd

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. Odpowiedzi: 3
    Autor: 09-09-2007, 15:39
  2. Odpowiedzi: 4
    Autor: 10-10-2006, 16:44

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj