Portál AbcLinuxu, 25. dubna 2024 16:13


Dotaz: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"

Petr Tomášek avatar 28.12.2008 12:21 Petr Tomášek | skóre: 39 | blog: Vejšplechty
Jak poslat v php hlavičku "HTTP/1.1 100 Continue"
Přečteno: 808×
Odpovědět | Admin

Zdravím!

Podle RFC2616 (8.2.3; 10.1.1 a 14.20.) je možné při HTTP POST/PUT(atd.), aby dříve, než klient pošle vlastní tělo žádosti na server, server otestoval podle hlaviček, zda-li obsah přijme nebo ne. Server pak může odpovědět pomocí "100 Continue" (v tom případě klient pokračuje v posílání těla žádosti), nebo hodit chybovou hlášku (např. "417 Precondition Failed"); v tom případě už klient nic neposílá.

Problém ovšem je, jak toho dosáhnout. Pokud použiji header() dvakrát, tj. jednou s kódem 100 a podruhé s jiným, pak při druhém použití fce header() prudí PHP s tím, že "headers already sent"...

Dá se s tím něco (rozumného) dělat?

Díky!

 

 

multicult.fm | monokultura je zlo | welcome refugees!
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.12.2008 12:50 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"
Odpovědět | | Sbalit | Link | Blokovat | Admin
PHP uz delsi dobu nepouzivam ale nepomuze zapnuti bufferovani vystupu?
Překladač ti nikdy neřekne: "budeme kamarádi"
Petr Tomášek avatar 29.12.2008 17:03 Petr Tomášek | skóre: 39 | blog: Vejšplechty
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"

Jj, díky, pomohlo to, lépe řečeno, pomohlo bufferování nevypínat (lépe řečeno vypnout jenom to, co je potřeba). Nakonec, tohle funguje:

 

    if ($_SERVER["HTTP_EXPECT"]=="100-continue" && $_SERVER["SERVER_PROTOCOL"]=="HTTP/1.1")
    {
      header("HTTP/1.1 100 Continue", false);
      ob_flush();
    }

multicult.fm | monokultura je zlo | welcome refugees!
29.12.2008 18:48 luky
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"
Nejspis brzy zjistite, ze je to reseni na hov k nicemu a uplne staci drzet se te hlasky a proste poslat hlavicky driv nez data.
Petr Tomášek avatar 18.2.2009 17:35 Petr Tomášek | skóre: 39 | blog: Vejšplechty
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"

Proč by to mělo být na h***? Pokud chce člověk korektně např. naimplementovat věci jako GroupDAV, pak ani jinou možnost nemá...

multicult.fm | monokultura je zlo | welcome refugees!
19.2.2009 11:41 David Růžička
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"

Jde o to, že zřejmě už posíláte nějaká data, třeba i nechtěně, a přitom nemusíte.

Momentálně tedy děláte něco takového:

Klient(GET/POST/PUT)-----------> Server
Klient <--------------(hlavičky) Server
Klient <-----------(nějaká data) Server
Klient <--------(další hlavičky) Server
Klient <------------------(data) Server

a chcete tohle:

Klient(GET/POST/PUT)-----------> Server
Klient <--------------(hlavičky) Server
Klient <--------(další hlavičky) Server
Klient <------------------(data) Server

 

Ta "nějaká data" mohou být např. nechtěné odřádkovánínebo mezera v nějakém inkludovaném souboru (za posledním ?>) nebo nějaké echo nebo print ještě v první fázi práce skriptu, kdy ještě nechcete klientovi posílat data.

Petr Tomášek avatar 24.2.2009 08:54 Petr Tomášek | skóre: 39 | blog: Vejšplechty
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"

To je kravina, jak jsem psal, hlášku "header already sent" to píše pouze pokud použiji dvakrát po sobě header() se stavovým kódem, nikoliv když použiji header() jen jednou - což dokazuje, že data nikde mezitím neposílám. IMHO bude chyba někde v implementaci php...

multicult.fm | monokultura je zlo | welcome refugees!
24.2.2009 13:16 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"
Nie je problem v tom, ze PHP by nemalo mat nic co docinenia s posielanim spravy HTTP 1xx? Ibazeby bol v PHP napisany komplet HTTP server, nielen iba aplikacia. Asi som nieco nepochopil, ale pride mi to trochu od veci, aby aplikacia rozhodovala o statuse HTTP spravy, ktora sa posle klientovi. IMHO aplikacia vo vseobecnosti ani nema pocitat s tym, ze jej vystup je klientovi doruceny tym ci onym komunikacnym protokolom.
Petr Tomášek avatar 24.2.2009 19:21 Petr Tomášek | skóre: 39 | blog: Vejšplechty
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"

Proč, propána? :-o

multicult.fm | monokultura je zlo | welcome refugees!
24.2.2009 20:48 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"
Co to máte za nápad, posílat dvě různé odpovědi za sebou? Jste si jistý, že to je v souladu se specifikací???
13.2.2010 20:34 xurpha
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"
No, jenze presne k tomu ta hlavicka "HTTP/1.1 100 Continue" je, viz RFC...
14.2.2010 10:33 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Jak poslat v php hlavičku "HTTP/1.1 100 Continue"
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkusil jste použít funkci header se třetím parametrem a replace nastaveným na true?
header('x', TRUE, 100);
header('x', TRUE, 200);
Mimochodem, odpověď 100-Continue můžete odpovědět jedině v případě, kdy klient pošle Expect: 100-continue.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.