HTTP status kód formuláře

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
paranoiq
Člen | 392
+
0
-

neměl by špatně vyplněný formulář vracet jako výchozí chování HTTP kód 400 Bad Request nebo jiný 4xx? teď vrací 200 OK, což asi není OK

redhead
Člen | 1313
+
0
-

Ne.

400 Bad Request: The request could not be understood by the server due to malformed syntax.

400 Bad request neznamená, že posíláš nevalidní data, ale že aplikace requestu nerozumí a nedokáže jej zpracovat, což u formuláře není pravda. Nejenže mu rozumí, ale dokáže na něj správně reagovat a odeslat příslušnou odpověď (která je v protokolu http správná – tedy 200).

teď vrací 200 OK, což asi není OK

Mě to naopak přijde nejvíc OK jak jen může. Ani jiné 4xx statusy se na to nehodí. Je to prostě správná reakce serveru na legitimní příchozí request.

hrach
Člen | 1838
+
0
-

Taky mi to prijde naprosto ok.

paranoiq
Člen | 392
+
0
-

ano 400 má nějaké technické pozadí a ani jiný mi nepřijde vhodný :/

a souhlasím, že kód 200 je správná reakce serveru, ale je to správná reakce aplikace? mezi tím je takový drobný rozdíl

Filip Procházka
Moderator | 4668
+
0
-

Pokud děláš nějaké api, můžeš si formulář upravit aby při chybě posílal jinou hlavičku. V aplikaci pro prohlížeč to je imho hloupost.

redhead
Člen | 1313
+
0
-

Jenže HTTP je pouze protokol pro komunikaci se serverem. Určitě znáš to schéma komponent pro webové aplikace. Na googlu toho najdeš spousta. Klient komunikuje se serverem přes HTTP a až server „obsahuje“ aplikaci, která něco dělá. Dalo by se říct, že aplikace by měla být od HTTP odstíněná. Ta hranice ovšem není zcela ostrá, pochopitelně.

ale je to správná reakce aplikace?

Podle mě ano, je. Pokud bych dělal API a používal k validaci vstupů formuláře (je to takový pochybný, ale má to jistě své výhody), tak bych rozhodně jako odpověď na nevalidní vstup neposílal jiný HTTP kód, žádný k tomu snad není ani určen – snad krom 401, která je ale odpovědí na neplatnou HTTP (sic) autentizaci.

Proč není lepší poslat JSON nebo jakýkoliv jiný formát s položkou ‚error‘, ‚errorMessage‘, ‚errorCode‘ nebo něco podobného? Navíc se tím odstíníš od HTTP a můžeš použít jiný protokol. (mluvím teď o API)

Editoval redhead (30. 8. 2012 18:02)

paranoiq
Člen | 392
+
0
-

to záleží na tom jak na který kód prohlížeč reaguje. např. posílání 301 po zpracování formuláře také není v souladu se standardem, tak jak ho naši internetoví praotci vymysleli, ale splňuje to požadovaný účel

nejde mi o API, ale o zjednodušení automatizovaných aplikačních testů. aplikace by měla dát vědět co je špatně na jiné úrovni než jen jakási chybová hláška v textu odpovědi (ty mohou být různé a v různých jazycích). a zavádět pro tento účel vlastní protocol mi přijde opravdu mimo

zajímá mě názor ostatních. vím že to mohu ovlivnit (Form::onError) a nejspíš se tak i zařídím. pokud ano, pak možná použiju 400 pro nekompletní data a 449 pro chybějící/prošlou CSRF protection

redhead
Člen | 1313
+
0
-

Řešíš tedy docela specifický problém, který se úplně nehodí na obecné použití web. aplikací. Takže do samotného Nette to podle mě nepatří a měl by sis to zařídit sám. :)

hrach
Člen | 1838
+
0
-

Vsak se taky po odeslani formu tyvoe neposila 301 ale 303, kterej je k temu urcenej.
https://en.wikipedia.org/wiki/HTTP_303

paranoiq
Člen | 392
+
0
-

@hrach: no jasný typičo! mea culpa

@redhead: nejspíš nepatří