Kas yra tinkamas HTTP būsenos kodas, kai nukreipiamas į prisijungimo puslapį?

Kai vartotojas nėra prisijungęs ir bando pasiekti puslapį, kuriam reikia prisijungimo, koks yra teisingas HTTP būsenos kodas, nukreipiantis į prisijungimo puslapį?

Aš klausiu, nes nė vienas iš 3xx atsakymų kodų, nustatytų W3C , atitinka šiuos reikalavimus:

10.3.1 300 pasirinkimų

Prašomas šaltinis atitinka bet kurią iš įvairių vaizdų, kurių kiekviena turi savo konkrečią vietą, ir agento vykdomą derybų informaciją (12 skyrius), su sąlyga, kad vartotojas (arba vartotojo agentas) gali pasirinkti pageidaujamą vaizdą ir peradresuoti užklausą į tą vietą.

Jei tai nebuvo HEAD užklausa, atsakymas turi apimti objektą, kuriame yra funkcijų ir vietos išteklių sąrašas, iš kurio vartotojas ar vartotojas gali pasirinkti tinkamiausią. subjekto formato medijos tipas, nurodytas „Content-Type“ antraštės lauke. Priklausomai nuo formato ir galimybių

vartotojo agentas, automatiškai pasirenkamas tinkamiausias pasirinkimas CAN. Tačiau ši specifikacija neapibrėžia tokio automatinio pasirinkimo standarto.

Jei serveryje yra pageidaujamas pateikties pasirinkimas, BŪTINA įterpti konkretų URI tam vaizdui vietovės lauke; Naudotojai gali naudoti automatinio peradresavimo vertę. Šis atsakymas yra saugomas, jei nenurodyta kitaip.

10.3.2 301 Nuolat perkelta

Prašomas šaltinis priskyrė naują nuolatinį URI, o bet kokios būsimos nuorodos į šį šaltinį turėtų naudoti vieną iš grąžintų URI. Klientai, turintys nuorodų redagavimo galimybes, turėtų, jei įmanoma, automatiškai perrašyti nuorodas į užklausą-URI į vieną ar daugiau serverio grąžintų nuorodų. Šis atsakymas yra saugomas, jei nenurodyta kitaip.

Atsakyme turi būti pateiktas naujas nuolatinis URI. Jei užklausos metodas nebuvo HEAD, atsakymo tema turėtų būti trumpas hiperteksto pranešimas su hipersaitu su naujuoju URI.

Jei būsenos kodas 301 gavo atsakymą į kitą nei GET ar HEAD užklausą, naudotojo agentas NEGALIMA automatiškai peradresuoti užklausos, jei to negali patvirtinti naudotojas, nes tai gali pakeisti sąlygas, kuriomis jis buvo išduotas.

  Note: When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request. 

10,3,3 302 Rasta

Prašomas šaltinis laikinai yra kitame URI. Kadangi peradresavimą galima keisti, kartais klientas turi toliau naudoti užklausos-URI būsimiems prašymams. Šis atsakymas saugomas tik talpykloje, jei nurodomas „Cache-Control“ arba „Expires“.

Atsakyme turi būti pateikiamas laikinas URI. Jei užklausos metodas nebuvo HEAD, atsakymo tema turėtų būti trumpas hiperteksto pranešimas su hipersaitu su naujuoju URI.

Jei būsenos kodas 302 gaunamas atsakant į kitą nei GET ar HEAD užklausą, naudotojo agentas NEGALIMA automatiškai peradresuoti užklausos, jei to negali patvirtinti naudotojas, nes tai gali pakeisti sąlygas, kuriomis jis buvo išduotas.

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed to change the method on the redirected request. However, most existing user agent implementations treat 302 as if it 

buvo 303 atsakymai, kurie vietovės vertės lauke atliko GET, nepaisant pradinio užklausos metodo. Prie serverių, kurie nori unikaliai tikėtis kliento atsakymo, pridėta būsenos kodų 303 ir 307.

10.3.4 303 Žr

Atsakymą į užklausą galima rasti kitame URI, ir TIKSLAS turėtų būti atkurtas naudojant šį šaltinį naudojant GET metodą. Šis metodas iš esmės yra skirtas suteikti POST aktyvuotą scenarijų išvestį, kad naudotojo agentas būtų nukreiptas į pasirinktą šaltinį. Naujasis URI nėra pakaitalas iš pradžių prašomam ištekliui. Atsakymas 303 NEGALIMA būti saugomas talpykloje, tačiau atsakymas į antrąjį (peradresuotą) užklausą gali būti išsaugotas talpykloje.

Atsakyme turi būti pateikti skirtingi URI su vietos lauku. Jei užklausos metodas nebuvo HEAD, atsakymo tema turėtų būti trumpas hiperteksto pranešimas su hipersaitu su naujuoju URI.

  Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303. 

10.3.5 304 Nepakeistas

Jei klientas įvykdė sąlyginį GET užklausą ir prieiga yra leidžiama, tačiau dokumentas nebuvo pakeistas, serveris PRIVALO atsakyti su šiuo būsenos kodu. Atsakymas „304“ NEGALIMA turėti pranešimo korpuso, todėl visada baigiasi pirmoji tuščia eilutė po antraštės laukų.

Atsakymas turi apimti šiuos antraštės laukus:

  - Date, unless its omission is required by section 14.18.1 If a 

laiko serveris be sinchronizavimo laikosi šių taisyklių, o tarpininkas ir klientai turi savo datą bet kuriam atsakymui, gautam be vieno (kaip jau minėta [RFC 2068], 14.19 skirsnyje), talpyklos veiks tinkamai.

  - ETag and/or Content-Location, if the header would have been sent in a 200 response to the same request - Expires, Cache-Control, and/or Vary, if the field-value might differ from that sent in any previous response for the same variant If the conditional GET used a strong cache validator (see 

13.3.3 skirsnyje), atsakyme NEĮSKAIČIUOTŲ į kitus objektų antraštes. Priešingu atveju (t. Y. Sąlyginis GET naudojo silpną validatorių), atsakymas NEĮSKAIČIAU į kitus objektų antraštes; Tai apsaugo nuo neatitikimų tarp talpyklų saugomų subjektų ir atnaujintų antraščių.

Jei atsakymas 304 rodo, kad objektas šiuo metu nėra talpykloje, tada talpykla PRIVALO ignoruoti atsakymą ir pakartoti užklausą be simbolio.

Jei talpykla naudoja priimtą 304 atsakymą atnaujinti talpyklos įrašą, talpykla PRIVALO atnaujinti įrašą, kad atspindėtų visas naujas lauko reikšmes, nurodytas atsakyme.

10.3.6 305 Naudokite tarpinį serverį

Reikalingas šaltinis turi būti pasiekiamas per „Place“ lauko teikiamą terpę. Laukas Vieta suteikia proxy URI. Gavėjas privalo pakartoti šį prašymą per įgaliotąjį serverį. 305 atsakymus turėtų sukurti tik šaltinio serveriai.

  Note: RFC 2068 was not clear that 305 was intended to redirect a single request, and to be generated by origin servers only. Not observing these limitations has significant security consequences. 

10.3.7 306 (nenaudojama)

Būsenos kodas 306 buvo naudojamas ankstesnėje specifikacijos versijoje, nebenaudojamas ir kodas yra rezervuotas.

10.3.8 307 Laikinas nukreipimas

Prašomas šaltinis laikinai yra kitame URI. Kadangi peradresavimas gali būti pakeistas, kartais klientas turi toliau naudoti užklausos-URI būsimiems prašymams. Šis atsakymas saugomas tik talpykloje, jei nurodomas „Cache-Control“ arba „Expires“.

Atsakyme turi būti pateikiamas laikinas URI. Jei užklausos metodas nebuvo HEAD, atsakymo tema turėtų būti trumpas hiperteksto pranešimas su hipersaitu su naujuoju URI (-ais), nes daugelis prieš HTTP / 1.1 naudotojų agentų nesupranta 307 būsenos. į naują URI.

Jei būsenos kodas 307 gaunamas atsakant į kitą nei GET arba HEAD užklausą, naudotojo agentas NEGALIMA automatiškai peradresuoti užklausos, jei to negali patvirtinti naudotojas, nes tai gali pakeisti sąlygas, kuriomis jis buvo išduotas.

Aš naudoju 302, kol rasiu teisingą atsakymą.

Atnaujinimas ir išvada:

HTTP 302 yra geresnis, nes yra žinoma, kad jis geriau suderinamas su klientais / naršyklėmis.

89
15 мая '10 в 12:17 2010-05-15 12:17 Vidar Vestnes paklausė gegužės 15 d., 12:17, 2010-05-15 12:17
@ 4 atsakymai

Norėčiau pasakyti, kad 303 cm Kiti 302 Rasta:

Prašomas šaltinis laikinai yra kitame URI. Kadangi peradresavimas gali būti pakeistas , klientas turi toliau naudoti užklausos-URI būsimiems prašymams. Šis atsakymas galimas tik talpyklai, jei tai nurodyta lauke „Laikinoji atmintis“.

mano nuomone, artimiausiu metu atvyksta į įvažiavimo puslapį. Aš iš pradžių maniau, kad 303 see other , kuris veiktų taip pat gerai. Po tam tikros minties norėčiau pasakyti, kad 302 Found tinkamesnis, nes ieškomas šaltinis randamas, yra tik dar vienas puslapis, per kurį reikia pereiti prie jo. Atsakymas negauna numatytosios talpyklos, kuri taip pat yra gera.

44
15 мая '10 в 12:21 2010-05-15 12:21 Atsakymas duotas Pekka 웃 gegužės 15 d. 10:21 2010-05-15 12:21

Tai neteisingas HTTP peradresavimo mechanizmo naudojimas. Jei vartotojas nėra prisijungęs, jūsų paraiška turėtų grąžinti 401 Neteisėtą . Jei vartotojas yra įgaliotas, bet neturi prieigos prie prašomo šaltinio, turite sugrįžti 403 .

border=0

Pavyzdžiui, turite atlikti kliento pusės peradresavimą. pagal „javascript“. peradresuoti būsenos kodą, nes trūksta reikalaujamo leidimo . Naudojant 30x, tai neatitinka HTTP.

37
08 марта '13 в 23:00 2013-03-08 23:00 atsakymas pateikiamas filip26 kovo 8 d. 13 val. 23:00 2013-03-08 23:00

Manau, kad tinkamas sprendimas yra HTTP 401 antraštė (nėra įgaliota).

http://en.wikipedia.org/wiki/HTTP_codes#4xx_Client_Error

Šios antraštės tikslas yra būtent tai. Tačiau vietoj nukreipimo į prisijungimo puslapį teisingas procesas atrodys panašus:

  • Neįregistruotas vartotojas bando pasiekti ribotą puslapį.
  • sistema identifikuoja, kad vartotojas nėra užregistruotas
  • grąžina HTTP 401 antraštę ir parodo prisijungimo formą tame pačiame atsakyme (o ne peradresavime).

Tai yra gera praktika, pavyzdžiui, naudingas 404 puslapis su nuorodomis į svetainės žemėlapį ir paieškos formą.

Pamatykite jus vėliau.

8
28 мая '10 в 20:25 2010-05-28 20:25 Dave buvo atsakyta gegužės 28 d., 10 val. 20:25 2010-05-28 20:25

Aš turėjau retų atvejų, kai „Firefox“ naršyklė išsaugojo 302 peradresavimą. Būtent dėl ​​šios priežasties aš naudoju 307 prisijungimo puslapius ir, pavyzdžiui, nukreipiu į naują straipsnį / pranešimą / komentarą ir kt.

Jei naudojate 302, nepamirškite dvigubai patikrinti, ar talpinimas yra išjungtas:

 header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d MYH:i:s') . ' GMT'); header('Cache-Control: no-cache'); header('Pragma: no-cache'); header('Cache-Control: post-check=0, pre-check=0', false); 
-1
30 янв. atsakymą pateikė mgutt sausio 30 d 2014-01-30 23:09 '14, 23:09, 2014-01-30 23:09

Kiti klausimai, susiję su arba Užduoti klausimą