Komentáře k článku

Protokol HTTP

HTTP je jedním z těch starých dobrých protokolů (jako třeba SMTP nebo POP3), u kterých člověk nepotřebuje žádný zvláštní klientský program a k tomu, aby se serverem navázal smysluplnou komunikaci a získal od něj odpověď, mu stačí telnet. V textu se podíváme na HTTP trochu techničtěji, „pod kapotu“.

Zpět na článek

24 komentářů k článku Protokol HTTP:

  1. tomasmatejicek

    Hned v uvodu chyba

    Vytratilo se tam CRLF hned v uvodnim prikladu…
    GET /pokus.xhtml HTTP/1.0Host: example.com

    1. František KučeraAutor příspěvku

      Re: Hned v uvodu chyba

      Ano, chybí tam konec řádku. Prosím někoho z redakce o opravu, já už se k editaci nedostanu.

      1. MilanK

        Jak je to s konci radku?

        Jeste 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…

        1. František KučeraAutor příspěvku

          Re: Jak je to s konci radku?

          Normá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

    2. kmarty

      Re: Hned v uvodu chyba

      Opravte 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?

      1. František KučeraAutor příspěvku

        Re: Hned v uvodu chyba

        1.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.

  2. seberm

    Podekovani

    Velmi pekny clanek, skvele a srozumitelne napsany. Dekuji.

    Mimochodem – myslim, ze clanek o wiresharku by uvitalo hodne lidi:-), vcetne me.

  3. hynek

    Opravit chybný link

    Odkaz 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.

  4. Sten

    Kód jazyka

    Vš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.

    1. František KučeraAutor příspěvku

      Re: Websocket

      Až 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ě).

      1. bauglir

        Re: Websocket

        se 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….

    2. bauglir

      Re: Websocket

      potř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

  5. ic

    request/responese

    Tak 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: Q2hlY2sgSW50Z­WdyaXR5IQ==
    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.

    1. Sten

      Re: request/responese

      Content-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á.

      1. František KučeraAutor příspěvku

        Re: request/responese

        jj, 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).

  6. Ladislav Thon

    Re: Protokol HTTP

    Jak ř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. :-)

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3542