HTTP status kód formuláře
- redhead
- Člen | 1313
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.
- Filip Procházka
- Moderator | 4668
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
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
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
- hrach
- Člen | 1838
Vsak se taky po odeslani formu tyvoe neposila 301 ale 303, kterej je k temu
urcenej.
https://en.wikipedia.org/wiki/HTTP_303