Transfer-Encoding: chunked

Dneska tu mám mozkový cvičení za účelem práce s odpovědí serveru na HTTP1.1 požadavek. Nebudu psát žádný konkrétní kódy, php, javu, céčko atd, prostě jen slovní řešení a zápis v pseudokódu.

Nastíníme si problém

Pokud náhodou děláte v něčem, co si neumí poradit s chunked přenosem, je potřeba výsledný přijatý response od serveru nějak zkonvertovat do smysluplných dat. Poprasený příchozí data vypadaj asi takhle.

HTTP/1.1 200 OK
Date: Sat, 08 Nov 2008 22:08:21 GMT
Server: Apache/2.0.63 (Win32)
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml;charset=utf-8

56
nejaka silena odpoved od serveru
0

Bystré oko zaregistrovalo především, číslo 56 na začátku dat a na konci potom 0 (nulu). Ti bezradnější již vědí z internetu, o co go, ostatním poradím a vyřeším.[MORE] Jen v rychlosti vysvětlím: Chunked enkoding rozseká data do bloků a přidá k nim velikost v hexa. Takže číslo 56 znamená: 86 dat do dalšího chunku. Nula znamená konec. Přesný zápis je [hlavička HTTP] \r\n \r\n {HEXvelikost} \r\n data \r\n {HEXvelikost} \r\n data \r\n 0 \r\n

zkusíme řešení

Po bestiálním prohledání internetu, s googlem i bez, jsem toho teda moc neobjevil. Zdá se, že tenhle problém nikdo neřeší. Na php stránkách nějaký borec zveřejnil kód, který byl založený na hledání \r\n znaků a ve smyčce zuřivě prochází string a pracuje a pracuje. Bohužel k výsledku se nedopracuje, pač to měl napsaný blbě. Tahle myšlenka se mi i přes to zdála dobrá a jal jsem se konat stejně. Postupně projít string, hledat \r\n znaky a podle čísla vytahovat data a skládat do nové proměné. Celé to ovšem naráželo na nějaké ty problémy.

Především rychlost byla dost tristní. S rostoucí délkou vstupu roste i doba. Dobré tak pro microsoft, nikoliv pro mě, génia :) Druhou závadu jsem odhalil, když jsem testoval. No nějak ty velikosti chunků selhaly a udávali hausnumera. Takže se to posrahausovalo. Nejdřív jsem řešil nějaký ty ifka jak to obejít a pak jsem se na to vysral a vyřešil to jinak. Spoleh na ty chunked čísla není.

Funkční řešení

Všechno jsem smazal, odsednul se dva metry od pičítače a čekal co mozek na to. Snažil jsem se na to jít od lesa. Pojmout to jinak. A pak mě to trklo, myšlenka nedostižné kvality: Jednoduše vyseknu ty ošklivý čísla co jsou navíc a hotovo. Nejdřív jsem nevěděl jak to napsat, a pak to vyřešil jednoduchý replace regular. Slovně tedy: “nahraď vše, co začíná a končí \r\n a uprostřed je jeden až 10 hexa znaků. Deset jsem zvolil takříkajíc odhadem. V řeči vb.net Regex.Replace(input, “\r\n(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f){1,10}\r\n”, “”) a prosím pěkně, záměrně jsem to rozepsal po jednom! Tím to vysekne všechny hnusný chunked informace a máte to čistý jak víno. Zatím to funguje výtečně. Je to na jeden řádek a vcelku rychlé.

Finální řešení

Trošku se mi za poslední týden sešlo hodně nepříjemností najednou. Tak nějak z donucení jsem udělal pro známého stránky, taková rychlovka to byla. I přesto jsem nestíhal nic ostatního. Co čert nechtěl, začalo venku svítit sluníčko a to je jasný signál pro vytáhnutí kola ze zimního spánku. O tom příště. Hlavně jsem se rozhoupal a pořídil sestavu pro server.[MORE]

Neptejte se jak, sehnal jsem socketA procesor a k tomu základní desku na via čipsetu. To potěšilo především sata řadičem na desce a taky grafikou a vším ostatním. Vlastně nestavím ani tak server, ale něco jako multifunkční zařízení, které splní každé přání. Vše začalo nabírat špatná směr, hned potom co jsem žiletkou rozpojil můstky na procesoru a doufal v nastavení malého napětí pro procesor. Nejdřív jsem myslel, že jsem oddělal procesor, ale pak jsem investigativně přišel na jedoduchou pravdu. Ta zku*vená základní deska neumí nastavit menší napětí než 1,5V. Což je teda fakt na pikaču. Procesor bude žrát jak stádo krav. A pro nic. Zkusil jsem najít regulátor na internetu, ale šváb čínské provenience je nedohledatelný. Asi nějaký custom build :( . O datasheetu si můžu nechat zdát. Kvalitním vybavením na rozbor zapojení nedisponuju, a tak jsem to překousnul. Procesor jsem nechal tikat na 1,2GHz. Ve spojení s 1GB ram je to nadprůměrná konfigurace. Jen tak okrajově. Maximálka je 54W brrrr. Bios za 48W a idlle v OS se zapnutým C2&Halt :)) 31W. Na server je to dost. Po přičtení “účinosti” zdroje jsme cca 36W ze sítě. Na multistroj to je přiměřené. Pro změnu jsem mohl odpojit HW router (6W) a přesunout funkcionalitu na pc. A na tenhle stroj jsem potom několikrát po sobě zcela neúspěšně migroval data z hostingu. Vyskytly se problémy s češtinou a to výhradně používám utf8. No záhada na pozdní večery. Ale je to za mnou a konečně můžu v apachovi dělat subdomény jak divej :).

Sklípkani

3.3.2007 Sabulosum překvapil pátým svlekem. Za odměnu dostal v neděli dva červíky. Už mi došli. Musím koupit nový. Dost jich pošlo mrazy nebo vysušením. Momentálně jsem je umístil do krabice k serveru aby měli trochu tepla. Plánuju konečně online kameru abych měl dohled nad jejich životy. Snad jim to neublíží.

Nesmím taky zapomenout na práci. Přiblížil se termín dokončení úkolů co jsem měl udělat a tak bylo potřeba pracovat. To mi taky sebralo dost času. Rozumíme si. Co ovšem považuji za tah roku je ranní vstávání. Začal jsem mít problém vstávat na devátou ranní a jít “pracovat”. Teďka skáču jako jura z postele už o půl osmé a celý den je mnohem lepší. Mám supr náladu, jsem pln energie. No krása. Jak z reklamy na zdravou snídani. Možná za to může kolo, možná se těším na změnu času. Těžko říct.

A jestli náhodou mám pravopisný chyby v textech, dobře mi tak. Jsem blb na češtinu. Živí mě programování. Howgh.