Řekl bych, že podle protokolu HTTP/1.1 hlavička Host v požadavku povinná je.
Viz rfc2616:
A client MUST include a Host header field in all HTTP/1.1 request messages.
...
All Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request)
status code to any HTTP/1.1 request message which lacks a Host header field.
Při použití HTTP/1.0 by povinná nebyla.
Zkousel jsem telnet www.root.cz 80 a je to presne tak: pri HTTP/1.0 hlavicku nechce. Pri GET http://www.root.cz HTTP/1.0 vse funguje O.K. (stahnu titulni stranku), ALE pri GET / HTTP/1.0 stahnu znamou stranku z instalace Apache "It workerd" -> neni to chyba konfigurace serveru?
Celkem vyznamnou se mi jevi hlavicka Content-Disposition! Programatori tento problem mozna resili - je potreba ziskat nejaky obsah souboru tak, aby se ulozil s jinym jmenem, nez ma v URL.
Budu demonstrovat na prikladku:
<?php
Header("Content-Disposition: filename=vystup.txt");
readfile("./tajny_obsah.inc");
php?>
Udajne vsak predevsim IE na tuto hlavicku obcas kasle...
Horsi je, ze IE kasle (mnohdy, porad?) i na informaci v Content-Type, kde ma byt typ dokumentu podle MIME.
Typicke je, pokud je soubor treba .doc, ovsem je uvedeno text/plain, anebo opacne .la2 zase chce porad ukladat.
Jinak Host je povinny v HTTP/1.1 alespon s hvezdickou, a to take kvuli proxy-serverum. Pro "tajne" nemusi ani klient vedet, ze se na ne obraci. Proc se ale redakce nejprve nepodiva do RFC2616, nez nekam neco pripise ? Jine http-hlavicky klient posilat nemusi ani ve verzi 1.1, coz je casta chyba programatoru, kdyz spolehaji na hlavicku Referer ( jako treba na web.cvut.cz ).
P.S. RFC jsou (dobre) dostupne pres FTP i na pub.vse.cz/pub/docs/rfc/
To, ze MSIE na neco kasle mi az tak moc nevadi, to je problem toho kdo ho pouziva. :) Horsi je ze Microsoft-IIS/5.0 [alespon tak jak je nakonfigurovan na www.zive.cz], kasle na klientuv accept-charset, vzdycky mu dokument naserviruje v CP1250, a ani se to neobtezuje oznamit v Content-Type...
Mohl by me nekdo, prosim, nasmerovat na priklad http hlavicky se zakodovanymi udaji z HTML formulare, jak je odesila browser? Idealni, kdyby tam byla zaroven i cookie.
Nejlepe vypis kompletni hlavicky.
Jde mi hlavne o to, jak jsou data kodovana a zda musi byt uvedena jejich delka. Experimentalne jsem zjistil, ze je to velmi podobne metode GET, tedy parametry jsou oddeleny & a mezera je nahrazena + a podobne.
Ale jak je to napriklad s viceradkovym vystupem z TEXTAREA?
Mohou jednotlive parametry hlavicky obsahovat \n ?
Jde nejak celou hlavicku na serveru zachytit a nechat si vypsat? (v PHP to urcite nelze, co treba PERL?)
Potreboval bych to na diplomku.
Dekuji.
P.S.
Dival jsem se do RFC, ale tam priklady zrovna neoplyvaji. Navic z toho clovek nepozna, ktere metody se skutecne pouzivaji a ktere ne (PUT,DELTE)
Velmi bych uvital dalsi dil tohoto clanku, ktery by se venoval temto pokrocilym tematum
HTTP/1.0 200 OK
Server: Microsoft-IIS/4.0
Date: Wed, 24 Jan 2001 13:40:09 GMT
Content-Length: 42861
Content-Type: text/html
Expires: Thu, 31 May 1990 11:30:14 GMT
Set-Cookie: ASPSESSIONIDGQGQGSBC=AHDGLCFDOBLIAOHCPFCPOEJC; path=/
Cache-Control: private
Age: 25
X-Cache: MISS from intr.justice.cz
X-Cache-Lookup: MISS from intr.justice.cz:3128
Proxy-Connection: close
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, */*
Accept-Language: cs
Authorization: Basic ZWNvbm9taWE6cm90YWNl
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)
Via: 1.0 intr.justice.cz:3128 (Squid/2.2.STABLE5)
X-Forwarded-For: 10.1.2.81
Host: tester.justice.cz
Cache-Control: max-age=259200
Connection: keep-alive
bohuzel!
mam po ruce mam jenom hlavicky, jak server nastavuje cookie a klientskou autorizaci.....
ale libovolnou hlavicku lze zachytit treba takhle:
1. podivat se prohlizecem na nejaky linuxovy stroj (zrovna po ruce)
2. trochu si pobrouzdatat a ziskat cookie (samozrejme pokud je server posila)
3. zastavit apache a spustit
socket -s 80
4. klepnout na nejaky odkaz....
5. precist si hlavicku, kterou socket zachytil...
6. pokud jsme brouzdali v IE, vypnout windows a prejit k linuxu!
7. program socket neni nutny, lze pouzit libovolny podobny program....
V PHP to od WWW-klienta umí třeba funkce phpinfo();
V Perlu pak staci vypsat proměnnou %ENV, příklad je přímo v Helpu.
Na druhou stranu - HTTP-hlavičky serveru - nejlépe si pořídit Lynx ( je i verze do MS-Windows ) a zadat ] (jako pravou hranatou závorku)
P.S.
Jen vyjímečně se dostane něco jiného, protože Lynx posílá požadavek HEAD a ne GET. Podle RFC by však měl server odpovídat stejně.
nedavno sem napsal jednoduchej skript kterej ti ukaze obsah hlavicky i telo. (http://dabu.dhs.org/header.php3)
kdyz sem chtel vedet co msie ci mozilla postuje a jak vypada hlavicka udelal sem si prg v builderu s komponentou serversocket (nebo jak se menovala) napsal par metod a pak jednoduse action dotycnyho formulare sem presmeroval na http://localhost:81 a bylo vymalovano :)
jestli to chces poslu...
Vazeni a mili ctenari ROOTa. Chtel bych vas poprosit o radu, nebo spise o male vysvetleni. Po svem predchudci jsem ve webovych strankach meho zamestnavatele podedil velice "tucnou" hlavicku.
Nektere polozky mi nejsou zcela jasne, dokonce se mi zda, ze nektere z nich jsou i zbytechne. Neni to tak, ze bych vubec nevedel o co jde, ale v "moudrych knihach" se zpravidla doctu pouze co ten ktery parametr nastavuje, coz vim, ale uz se nedozvim, co z tohoto nastaveni plyne. Cim je vyhodne, nebo kdy jej pouzit.
Napriklad:
<META HTTP-EQUIV="cache-control" CONTENT="private">
Ja sice vim, ze to znamena, ze lze dokument kacheovat pouze v privatnich kache (kesich (ach ta cestina) ;-),
ale celkem uz netusim, k cemu je to dobre. Nebo lepe receno, nevim proc by stranka nemela by kachovana, vzdyt se pak rychleji natahuje ne? Takovy prikaz je dobre pouzivat u veci, ktere jsou nejakym zpusobem osobni a potrebuji jistou miru "utajeni". Je to tak?
Pokud mi nekdo poradite s touto veci, budu rad, ale mozna, ze je lidi s takovymi otazkami vic. Mozna by nebylo spatne to probrat vic do hloubky, obecne informace jsou v "moudrych knihach".
A vubec nemusi jit pouze o http, spise by nebylo spatne probrat celou hlavicku html dokumentu.
Mimochodem, v komentari, ktery urcuje typ a verzi:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
se v i v ceskych strankach vetsinou uvadi EN, jako by slo o anglicky dokument.
Kdesi jsem cetl, ze by se tam melo uvadet (tusim)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//CZ">
Jak to je?
Poslední část veřejného identifikátoru "-//W3C//DTD HTML 4.0 Transitional//EN" určuje jazyk, ve kterém je napsaný dokument identifikovaný tímto veřejným identifikátorm.
Vzhledem k tomu, že oním dokumentem je DTD pro HTML 4.0, které je napsané v angličtině, je jediná správná varianta EN.
Docela by mne zajímalo, kde jste se dočetl, že tam má být CZ. Rád bych zdroj této dezinformace zničil u pramene.
BTW: To "CZ" musel vymyslet nějaký "skutečný odborník". Když už někdo chtěl HTML stránku dokonale přeložit, měl z "EN" udělat "CS". Kód českého jazyka (cs) <> kód České republiky (cz).
Stranky obvykle zakazuji cache pokud maji dynamicky obsah, tedy skripty PHP,Perlu, CGI apod.
Nebo pokud to jsou stranky s opravdu CASTOU aktualizaci, radove minuty.
U skriptu pak ma zakaz logicke opodstatneni.
U statickych stranek o zadnem duvodu proc nekesovat nevim.
Z bezpecnosti to ale bezpecne nesouvisi, protoze kudy natahovana stranka projde, si ji stejne mohou odchytit, jestli budou chtit, cache, necache! pro skutecne utajeni se musi pouzit sifrovani, napr. metoda SSL.
Cache-control: private by mohla být typická pro stránky, kde se na serveru automaticky překódovává čeština, ale není přesně jasné, podle jakých parametrů. (Anebo když si chci zvýšit návštěvnost v nesmyslných statistikách, které obvykle správně nezohledňují přístupy z proxy-serverů.)
Viz: http://kizi2.vse.cz/kizi/IKSy/ kapitola 8 Využití protokolu HTTP
..ano, to je opravu dobry zdroj, Mohu doporucit
Takze odpoved browseru s POST argumenty by mela vypadat takto:
POST /lwgate/ HTTP/1.0
Content-Length: 41
prázdný řádek
execute=info&email=jjkastl@vse.cz&ref=yes
Zkusim jeste nejaky slozitejsi priklad s delsim textem a vice radky.
Taky se mi nezda, ze by Content-Length: MUSELO vzdy byt uvedeno!
Zkousel jsem poslat neco v JAVE (pres objekt URLConnection) do skriptu v PHP na lokalhostu dle zadaneho vzoru. A onbo si to PHP skutecne naparsovalo a dane promenne se tam objevili!
Ale parametr delky tam Java na zacatku asi tezko posle, kdyz to nemuze vedet!
(posilam to nam na nekolika println(..) ve for-cyklu, leda by to nekde bufferoval a pak inteligentne doplnil, ale to se mi nezda)