Kokį HTTP būsenos kodą turėčiau naudoti, jei užklausoje trūksta reikiamo parametro?

Manau, kad 412 (prielaida nepavyko), bet galbūt geriausias standartas?

252
nustatė EA. 2010-06-16 06:19 Birželio 16 d., 10:19, 2010-06-16 06:19
@ 10 atsakymų

Atrodo, kad 422 statusas yra tinkamiausias, remiantis spec .

Būsenos kodas 422 (neapdorotas objektas) reiškia, kad serveris supranta užklausos objekto turinio tipą (todėl 415 (Nepalaikomas laikmenos tipas) netinka), ir užklausos objekto sintaksė yra teisinga (todėl 400 (nepavykusių užklausų) būsenos kodas netinka), bet ne galėjo apdoroti pateiktas instrukcijas. Pavyzdžiui, ši klaida gali atsirasti, jei XML užklausos korpuse yra gerai suformuota (tai yra sintaksiškai teisinga), bet semantiškai klaidinga XML instrukcija.

Jie teigia, kad negaliojantis xml yra blogos sintaksės pavyzdys (raginama 400). Iškraipyta užklausos eilutė atrodo panaši, todėl 400 neatrodo tinkama gerai sukurtai užklausos eilutei, neturinčiai parametro.

UPDATE @DavidV teisingai rodo, kad ši specifikacija skirta „WebDAV“, o ne pagrindiniam HTTP. Tačiau kai kurios populiarios API, išskyrus „WebDAV“, vis dar naudoja 422, nes trūksta geresnio būsenos kodo ( žr. „Šį“ ).

231
25 апр. Atsakymą pateikė Kelvinas balandžio 25 d 2012-04-25 23:14 '12 11:14 PM 2012-04-25 23:14

Nesu tikras, kad yra standartinis standartas, bet norėčiau naudoti 400 Bad Request :

border=0

Prašymą serveris negalėjo suprasti dėl netinkamos sintaksės. Klientas NEGALIMA pakartotinai prašyti nekeisti.

125
16 июня '10 в 6:32 2010-06-16 06:32 Atsakymą pateikė Gertas Grenanderis birželio 16 d. 10 val. 6:32 2010-06-16 06:32

.NET WCF API tvarko trūkstamus parametrus, naudojant „ HTTP 404 “ „Endpoint not found“ klaidą naudojant webHttpBinding .

404 Not Found gali būti prasminga, jei kartu su parametro parašu manote, kad žiniatinklio paslaugų metodo pavadinimas. Tai yra, jei nustatysite „ LoginUser(string, string) žiniatinklio aptarnavimo LoginUser(string, string) ir prašote prisijungimo vartotojo LoginUser(string) , pastarasis nerastas.

Iš esmės tai reiškia, kad nerastas žiniatinklio paslaugų metodas, kurį skambinate kartu su nurodytu parametro parašu.

10.4.5 404 Nerasta

Serveris nerado nieko, kas atitiktų užklausos-URI. ne rodo, ar ši sąlyga yra laikina, ar nuolatinė.

Kaip teigė Gertas, 400 Bad Request išlieka galiojančiu atsakymo kodu, bet manau, kad tai paprastai naudojama norint nurodyti žemo lygio problemas. Jis gali būti lengvai interpretuojamas kaip netinkamas HTTP užklausos, galbūt trūkstamų arba negaliojančių HTTP antraštių ar panašių.

10.4.1 400 blogas prašymas

Prašymą serveris negalėjo suprasti dėl netinkamos sintaksės. Klientas PRIVALO pakartoti prašymą be pakeitimų.

23
16 июня '10 в 6:55 2010-06-16 06:55 Daniel Vassallo atsakymas birželio 16 d. 10 val. 6:55 2010-06-16 06:55

Galite atsiųsti kodą 400 Bad Request. Tai yra vienas iš 4xx bendrosios paskirties būsenos kodų, todėl galite jį naudoti norėdami nurodyti, ką ketinate: klientas siunčia užklausą, kurioje yra trūkstama informacija / parametrai, kuriuos jūsų programa turi tinkamai apdoroti.

5
16 июня '10 в 6:32 2010-06-16 06:32 atsakymą pateikė „ BoltClock “ birželio 16 d. 10 val. 6:32 2010-06-16 06:32

Viename iš mūsų API projektų nusprendėme nustatyti 409 būseną tam tikrai užklausai, kai negalime užpildyti 100% dėl parametro trūkumo.

HTTP būsenos kodas „409 Konfliktas“ mums buvo geras bandymas, nes šis apibrėžimas reikalauja, kad vartotojas turėtų pakankamai informacijos, kad galėtų atpažinti konflikto šaltinį.

Nuoroda: w3.org/Protocols/

Taigi, be kitų atsakymų, pvz., 400 arba 404, pasirinkome 409, kad įsitikintume, jog reikia ieškoti kai kurių užklausoje esančių pastabų, naudingų nustatant naują ir teisingą užklausą.

Bet kokiu atveju, mūsų atvejis buvo ypatingas, nes prieš dieną reikia siųsti kai kuriuos duomenis, jei prašymas nebuvo visiškai teisingas, ir turime priversti klientą pažvelgti į pranešimą ir suprasti, kas buvo negerai su prašymu.

Apskritai, jei mes turime tik tam tikrą trūkstamą parametrą , naudosime 400 ir trūkstamo parametro masyvą. Bet kai mums reikia siųsti papildomos informacijos, pavyzdžiui, apie konkretų atvejį, ir norime būti labiau tikri, kad klientas tai pasirūpins, mes išsiųsime 409

5
08 янв. atsakymą pateikė gabrielem 08 sausis 2015-01-08 17:06 '15, 17:06, 2015-01-08 17:06

Aš dažnai naudojasi 403 uždrausta klaida. Priežastis yra ta, kad prašymas buvo suprantamas, bet aš neketinu to daryti, kaip buvo prašyta (nes viskas yra negerai). Atsakymo objektas paaiškina, kas neteisinga, todėl, jei atsakymas yra HTML puslapis, puslapyje yra klaidų pranešimai. Jei tai JSON arba XML atsakymas, klaidos informacija yra.

Nuo rfc2616 :

10.4.4 403 Draudžiama

Serveris suprato prašymą, tačiau atsisako jį įvykdyti.
Autorizacija nepadės, ir prašymas NEGALIMA kartoti.
Jei užklausos metodas nebuvo HEAD, o serveris nori, kad prašymas nebūtų įvykdytas, jis turi aprašyti atsisakymo priežastį juridiniame asmenyje. Jei serveris nenori pateikti šios informacijos klientui, būsenos kodas 404
(Nerasta).

3
24 февр. atsakymas pateikiamas cdeszaq 24 vasario mėn. 2012-02-24 01:36 '12 at 1:36 am 2012-02-24 01:36

Galima teigti, kad reikėtų naudoti 404 Not Found nes nurodytas šaltinis nerastas.

2
17 янв. atsakymą Ray atsakė sausio 17 d. 2012-01-17 17:44 '12, 17:44, 2012-01-17 17:44

Paprastai pereisiu prie 422 (neperdirbtas objektas), jei kažkas iš reikiamų parametrų neatitinka to, ko reikalauja API galutinis taškas (pvz., Slaptažodis yra per trumpas), bet trūkstamo parametro atveju norėčiau eiti į 406 (nepriimtina).

1
06 марта '14 в 12:32 2014-03-06 12:32 atsakymas, kurį Elad Meidar pateikė kovo 14 d. 14 d

Tiems, kurie domisi, pavasario MVC (bent 3.x) šiuo atveju grąžina 400, o tai man atrodo negerai.

Bandžiau keletą „Google“ URL (accounts.google.com) ir ištrinau reikiamus parametrus, tokiu atveju jie paprastai grįžta į 404.

Norėčiau nukopijuoti „Google“.

1
20 мая '12 в 0:01 2012-05-20 00:01 atsakymą Neromancer pateikė gegužės 20 d., 12 val. 0:01 2012-05-20 00:01

Aš einu su 403.

RFC 2616 - Hiperteksto perdavimo protokolas - HTTP / 1.1

403 Draudžiama

Serveris suprato prašymą, tačiau atsisako jį vykdyti. Autorizacija nepadės, ir prašymas NEGALIMA kartoti. Jei užklausos metodas nebuvo HEAD, o serveris nori pranešti, kodėl prašymas nebuvo įvykdytas, jis turi aprašyti priežastį, kodėl jis nepavyko. Jei serveris nenori pateikti šios informacijos klientui, gali būti naudojamas būsenos kodas 404 (nerastas).

Turite aprašyti atsakymo priežastį. Jei nenorite to padaryti, tiesiog naudokite 404.

-3
17 мая '13 в 14:26 2013-05-17 14:26 atsakymas perduotas Francisco Tomé Costa gegužės 17 d. 13 val. 2013-05-17 14:26

Kiti klausimai dėl „ žymių arba „ Klauskite“