Kdyz neni dostupny wireshark (tshark) tak stejne dobre poslouzi i tcpdump.
Názory k článku
Protokol HTTP
Hned v uvodu chyba
celé vláknoVytratilo se tam CRLF hned v uvodnim prikladu...
GET /pokus.xhtml HTTP/1.0Host: example.com
Re: Hned v uvodu chyba
celé vláknoAno, chybí tam konec řádku. Prosím někoho z redakce o opravu, já už se k editaci nedostanu.
Jak je to s konci radku?
celé vláknoJeste bych zduraznil, ze podle RFC popisujicich HTTP protokol se radky oddeluji dvojici znaku CR a LF.
Vetsina HTTP serveru toleruje i samotne LF, ktere se pouziva v Unixovych textovych souborech (a mozna i jine kombinace). Ale nektere to vyhodnoti jako syntaktickou chybu a zavrou spojeni.
Linuxovy "telnet", ktery je pravdepodobne uveden v prikladu na zacatku, zrovna pri stisku klavesy Enter posle napsany radek a k nemu CR a LF (aspon v mem Debian Squeeze, overeno pred chvili tcpdumpem, ani jsem nemusel pouzit "set crlf").
Ale ten priklad se "socat" bude imho posilat pouze LF...
Re: Jak je to s konci radku?
celé vláknoNormálně socat posílá jen LF, což tedy taky funguje :-), většinou. Ale abychom to měli správně podle RFC, můžeme napsat:
socat TCP:example.com:80,crlf READLINE
a socat pak posílá hezky CRLF
Re: Hned v uvodu chyba
celé vláknoOpravte mne jestli se pletu, ale kdyz uz se do dotazu dava "Host:" ... nemelo by to byt spis HTTP/1.1 kdyz v 1.0 jeste nebyla?
Re: Hned v uvodu chyba
celé vlákno1.0 je tam pro jednoduchost, aby se spojení hned ukončilo ( Connection closed by foreign host.) a nezůstalo tam viset (museli bychom použít Connection: close) nebo ho shodit z klienta pomocí Ctrl+C (případně ^] a Ctrl+D v telnetu).
Hlavička Host: je od 1.1 povinná a v 1.0 může a nemusí fungovat – tam platí, že:
„However, new or experimental header fields may be given the semantics of request header fields if all parties in the communication recognize them to be request header fields.“
a často fungovat bude – rozdíl je pak hlavně v tom výchozím chování ohledně zavírání spojení: v 1.0 se zavře, pokud není uvedeno Connection: Keep-Alive a v 1.1 se nezavře, pokud nedáme Connection: close.
Podekovani
celé vláknoVelmi pekny clanek, skvele a srozumitelne napsany. Dekuji.
Mimochodem - myslim, ze clanek o wiresharku by uvitalo hodne lidi:-), vcetne me.
Opravit chybný link
celé vláknoOdkaz na "GNU Readline" nefunguje, protože před názvem serveru vypadlo "http://".
Děkuji za příjemný článek shrnující známé věci s odkazy na zdroje.
Kód jazyka
celé vláknoVšem autorům, kteří chtějí používat kódy jazyka, bych rád připomenul, že čeština má kód "cs", nikoliv "cz" (zato "CZ" je kód pro ČR). Linuxoví uživatelé to asi budou znát (čeština je v locales "cs_CZ"), ale u spousty webů jsem to viděl špatně a z vlastní zkušenosti vím, že je pak často zatraceně těžké takové aplikace opravit.
Websocket
celé vláknoAktualna tema: kedy pouzit HTTP (synchornne/asynchronne), a kedy Websocket.
Re: Websocket
celé vláknoAž ho bude podporovat významná část uživatelů dané aplikace :-)
Ale jinak Websocket přišel trochu s křížkem po funuse, protože tenhle druh komunikace se do HTTP už podařilo dobastlit, resp. ohnout komunikaci tak, aby nebylo potřeba upravovat protokol (pořád je to formálně na principu požadavek/odpověď, akorát ta odpověď je hooodně dlouhá a přichází postupně).
Re: Websocket
celé vláknose obávám, že se mýlíte... full duplex se nedá pomocí http simulovat... samozřejmě, pokud nepotřebujete full duplex, ale stačí vám např. long pooling, tak http použit můžete....
Re: Websocket
celé vláknopotřebujete full duplex a nepotřebujete, aby to běželo na "všech" (áčkových) pohlížečích? Použijte WS. Nepotřebujete full duplex nebo potřebujete aby to běželo skoro všude? Budete muset použít http
Super clanek
celé vláknoDiky
request/responese
celé vláknoTak si testuju, co jsem se dneska dozvěděl a nějak se nemůžu domáknout toho Content-MD5.
Chápu tu správně, že z uvedených příkladů je
Range: bytes=500-999
hlavička požadavku, kdežto
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
je hlavička odpovědi?
V tom případě, dá se Content-MD5 nějak vyžádat v požadavku? Protože nevím o žádném serveru, který by takovou hlavičku sám od sebe posílal.
Re: request/responese
celé vláknoContent-MD5 může posílat i klient, pokud posílá tělo požadavku (při POST). Vynutit se nedá a kvůli výkonu se moc nepoužívá.
Re: request/responese
celé vláknojj, např. v Apachovi jde úplně vypnout nebo úplně zapnout, nic mezi tím (posílat volitelně) a ve výchozím stavu je to vypnuté. Ona už jen představa, že si uživatel vyžádá stažení nějakého CD/DVD obrazu a nejdřív se bude muset spočítat MD5 ze stovek MB dat a pak se teprve můžou poslat hlavičky a vlastní data…
Chtělo by to modul, který by ten hash nepočítal pokaždé znova, ale bral ho např. z rozšířených atributů nebo z pomocného souboru (*.md5). Podobně jako to dělá ten Nginx s gzipováním (.gz soubor může být připravený předem a nekomprimuje se pokaždé znova).
Zapnout generování Content-MD5 se dá v nějakém bezpečném prostředí (menší soubory, interní systémy, API, které z těch hashů bude čerpat nějaké výhody…), ale i tak by bylo vhodnější to spočítat jen jednou (a pak jen kontrolovat, jestli se změnilo datum/velikost souboru).
pochvala
celé vláknopekny ozav v kusku pekny clanok, blahozelam autorovy, dakujem
Re: Protokol HTTP
celé vláknoJak řekl Jan Lehnardt na IRC: haha, I'm sitting in an ""HTTP Architecture" session, and all the two speakers do is tell the audience how CouchDB gets it all right. :-)