Išėjimas: GET arba POST?

Šis klausimas nėra susijęs su tuo, kada naudoti GET arba POST kaip visumą; . Tai yra klausimas, kurį rekomenduojama tvarkyti iš žiniatinklio programos išvesties. Radau daug informacijos apie GET ir POST skirtumus apskritai, bet neatrodėu konkretaus atsakymo į šį konkretų scenarijų.

Kaip pragmatistas, aš linkiu naudoti GET, nes jos įgyvendinimas yra paprastesnis nei POST; tiesiog palikite paprastą nuorodą ir baigsite. Atrodo, kad dauguma svetainių, kurias galiu galvoti, bent jau iš mano galvos. Net „ngn-wiki.ru“ tvarko atsijungimą su GET.

Tai, kas verčia mane jaustis drovus, yra (nors ir senas) argumentas, kad kai kurie žiniatinklio greitintuvai / tarpiniai serveriai iš anksto talpina puslapius spustelėdami ir gaudami kiekvieną nuorodą, kurią jie suranda puslapyje, todėl vartotojas gauna greitesnį atsakymą, kai jis paspaudžia iš jų. Nesu tikras, kad tai vis dar galioja, bet jei taip yra, tada teoriškai vartotojas su vienu iš šių greitintuvų išeis iš programos iš karto po to, kai įeis į sistemą, nes jo greitintuvas suras ir ištrauks iš nuorodų sistemos išvestį, net jei jis niekada nepaspaudė apie ją.

Viskas, ką iki šiol perskaičiau, sako, kad „POST“ turėtų būti naudojama „naikinamiesiems veiksmams“, o veiksmai, kurie nekeičia prašymų, tokių kaip prašymai, vidinė būsena, turi būti tvarkomi naudojant GET. Atsižvelgiant į tai, tikrasis klausimas čia yra:

Iš programos, kuri laikoma destruktyviu veiksmu / keičia vidinę programos būseną?

279
19 авг. nustatė Danielis Liuzzi 19 rug. 2010-08-19 14:32 '10 ne 14:32 2010-08-19 14:32
@ 9 atsakymai

Naudokite POST .

2010 m. GET tikriausiai buvo priimtinas atsakymas. Tačiau šiandien (2013 m.) Naršyklės įveda puslapius, kuriuos jie „galvoja“, kad lankotės toliau.

Čia yra vienas iš „StackOverflow“ kūrėjų, kurie apie šią problemą kalba Twitter:

Norėčiau padėkoti savo bankui už palikimą GET užklausai ir „Chrome“ komandai patogiai iš anksto gauti URL. - Nick Craver ( @Nick_Craver ) 2013 m. Sausio 29 d

įdomus faktas: „StackOverflow“ naudojama norint atsijungti per GET, bet ne daugiau.

314
29 янв. Atsakyti David Murdoch Jan 29 2013-01-29 19:14 '13, 7:14 val. 2013-01-29 19:14

Vienas iš būdų, kaip GET gali būti piktnaudžiaujama, yra tai, kad žmogus (konkurentas, galbūt :) įkelia vaizdo žymę naudodamas src="<your logout link>" ANYWHERE internete, ir jei jūsų svetainės vartotojas paklūsta šiame puslapyje, jis nežino, kad išeis.

32
19 авг. atsakymas duotas raveren 19 rug . 2010-08-19 16:01 '10 at 16:01 2010-08-19 16:01

REST metu neturėtų būti jokių sesijų, todėl nieko negalima sunaikinti. REST klientas yra patvirtintas kiekvienam prašymui. Prisijungęs Šis vartotojas turi parašą, kuris rodomas po kiekvienu pranešimu, tačiau negalite jo peržiūrėti.

Ką tikrai klausiate, ar naršyklė turėtų toliau siųsti autentiškumo duomenis kiekvienam prašymui.

Galbūt, jei jūsų paraiška sukuria įsiregistravimo iliuziją, turėtumėte turėti galimybę „atsijungti“ naudodami javascript. Kelionės nereikia.


„Fielding“ darbas - 5.1.3 skirsnis

Kiekviename kliento prašyme serveryje turi būti visa informacija, reikalinga užklausai suprasti, ir negali naudoti išsaugoto konteksto serveryje. todėl sesija yra visiškai klientas

32
19 авг. Atsakyti Darrel Miller 19 rug. 2010-08-19 15:30 '10, 15:30, 2010-08-19 15:30

Atsijungimas nieko nedaro už pačią programą. Jis pakeičia vartotojo būseną, palyginti su programa. Tokiu atveju atrodo, kad jūsų klausimas yra labiau pagrįstas tuo, kaip reikia pradėti naudotojo komandą, kad būtų pradėtas šis veiksmas. Kadangi tai nėra „žalingas veiksmas“, įsitikinkite, kad sesija yra atsisakyta ar sunaikinta, tačiau nei jūsų prašymas, nei jūsų duomenys nekeičiami, gali būti, kad abu metodai inicijuoja atsiėmimo procedūrą. Pranešimas turėtų būti naudojamas bet kokiems naudotojo inicijuotiems veiksmams (pvz., Naudotojo atsijungimai „Atsijungti“), o gauti galima rezervuoti atidėtoms programoms (pvz., Išimties aptikimas, potencialus naudotojo įsilaužimas nukreipiamas į prisijungimo puslapį su sistemos atsijungimu iš „GET“ ).

13
19 авг. atsakymą pateikė Joel Etherton 19 rug. 2010-08-19 14:43 '10, 14:43, 2010-08-19 14:43

Tiesa, GET / POST (arba kiti veiksmažodžiai) yra veiksmai, susiję su ištekliais (adresuojami URL) - tai paprastai reiškia išteklių būklę, o ne pačios programos būseną. Taigi, iš tikrųjų, turėtumėte turėti URL, pvz., [host name]\[user name]\session , tada "DELETE" bus teisingas veiksmažodis išeinant.

Naudojant [host name]\bla bla\logout kaip URL, kuris nėra pilnas REST (IMO) metodas, kodėl aptarkite tinkamą GET / POST naudojimą?

Žinoma, naudoju „GET“ išeiti URL iš savo programų: -)

11
19 авг. atsakymą pateikė VinayC 19 rug . 2010-08-19 14:37 '10, 14:37, 2010-08-19 14:37

Išankstinio talpyklos scenarijus yra įdomus. Bet manau, kad jei daugelis svetainių šiuo atveju nesijaudinkite, galbūt taip pat nereikia.

O gal nuoroda gali būti įdiegta javascript?

Redaguoti: kaip suprantu, techniniu požiūriu GET turėtų būti tik skaitymo užklausoms, kurios nekeičia programos būklės. POST turi būti rašyti / redaguoti užklausas, kurios keičia būseną. Tačiau kitos problemos, susijusios su taikomosiomis programomis, gali teikti pirmenybę GET per POST tam tikroms būsenos keitimo užklausoms ir nemanau, kad tai yra problema.

1
19 авг. atsakymą pateikė Richard H 19 rug. 2010-08-19 14:39 '10, 14:39, 2010-08-19 14:39

Sveiki, mano nuomone, kai prisijungiate prie sistemos, patikrinate naudotojo vardą / slaptažodį ir, jei jie atitinka, sukuriate prisijungimo raktą.

CREAT token => POST metodas

Atsijungę pakeisite raktą, todėl man labiausiai logiškas metodas turėtų būti DELETE

DELETE token => DELETE metodas

0
19 нояб. Atsakymas, kurį pateikė miorey 19 lapkritis 2017-11-19 01:14 '17 at 1:14 2017-11-19 01:14

Na, jei leisite savo žiniatinklio programai atsisakyti sesijos, kai atsijungiate nuo scenarijaus, jūs taip pat to nereikia. Paprastai yra sesijos kintamasis, kuris yra unikalus sesijai, kurią norite palikti.

-1
19 авг. atsakymas pateikiamas Rob 19 rug. 2010-08-19 14:35 '10, 14:35, 2010-08-19 14:35

Nematau, kaip registravimas (naudotojų teisių ištrynimas) yra aprašomasis veiksmas. Faktas yra tas, kad „logout“ veiksmas turėtų būti prieinamas tik vartotojams, kurie jau prisijungė prie sistemos, nes kitaip jis būtų pasenęs.

Atsitiktinai sugeneruota eilutė, esanti jūsų naršyklės slapukų rinkmenose, atspindi jūsų vartotojo sesiją. Yra daug būdų, kaip ją sunaikinti, todėl efektyviai išeiti iš jo yra tik jūsų lankytojo paslauga.

-1
20 авг. jpluijmers atsakymas, rugpjūčio 20 d 2010-08-20 00:18 '10 - 0:18 2010-08-20 00:18

Kiti klausimai apie žymes arba užduoti klausimą