ugrás a tartalomhoz

Mikor használjunk 404-et?

Joó Ádám · 2007. Aug. 20. (H), 21.30
Az aktuális munkám közben merült fel bennem egy kérdés, melyre nem tudok egyértelmű választ találni.
Mióta az oldalakat dinamikusan szolgáljuk ki, úgy, hogy gyakran csak egyetlen valódi állomány kerül meghívásra (általában index.php) különböző paraméterekkel (mostanában szép URL formájában), a not foundot is másképp kell értelmezni.

Konkrét eset: adott egy oldal felhasználói adatbázisa. A http://valami.hu/felhasznalok/pistike címet meghívva megtekinthetjük Pistike adatlapját. A http://valami.hu/felhasznalok/jozsi címet megadva hibaüzenetet kapunk, miszerint ilyen nevű felhasználó nem létezik. Ekkor az egyszeri webfejlesztő elgondolkodik, és arra jut, hogy, ha egyszer olyan tartalmat kértek, ami nem létezik, akkor illenék hozzá egy 404 Not Found fejlécet is kiadni.
Aztán tovább gondolkodik, és azt mondja, ha az adatbázis üres, akkor bizony a http://valami.hu/felhasznalok címet (melyen az összes felhasználót kilistázza a rendszer) meghívva is lehet, hogy ugyanígy kellene eljárni.

Kíváncsi lennék mások véleményére.
 
1

jó ötlet

Hojtsy Gábor · 2007. Aug. 20. (H), 21.59
A "jozsi" path-ra nyilván 404-et érdemes visszaadni, mert az valóban nincs. A "felhasznalok" index oldalról más lehet a döntés. El kell szerintem gondolkodni, hogy mit is tartalmaz az oldal. Ha nem "csak" egy lista, hanem mondjuk regisztrációs információkat vagy hasonlót is tartalmaz, akkor szerintem nem 404, ha csak a lista, akkor lehet 404. (Nyilván azon is múlik, hogy szeretnéd-e hogy indexelje egy kereső, ha hasznos tartalom van ott).
2

Hmm

inf · 2007. Aug. 21. (K), 00.03
Igazából tényleg elgondolkodtató. Igazából a teljes listát lehetne odatenni, vagy ilyesmi, persze ilyet csak akkor, ha bejelentkezett az illető, egyébként meg 404.
3

404?

Ronyn · 2007. Aug. 21. (K), 14.07
Én ovatosan bánnék a 404-el,hiszen bármilyen "barátságos",csak egy hibaoldal...
Az adott esetben,szerintem ésszerübb lenne,vissza irányitani a /felhasználok oldalra/szintre,egy egyszerü szöveggel figyelmeztetve,hogy nincs ilyen felhasználo,és ott rögtön választhat is másikat,ha csak elirás tortént...
Ha pedig belépéshez kötött,és nincs belépve,akkor oda amit még láthat belépés nélkül...
4

megoldás lehetőségek

winston · 2007. Aug. 21. (K), 15.41
ha jól értem a kérdést... akkor szerintem a következőket tudod tenni, izlés, és az oldal jellege szerint:
1. listát adsz a felhasználókról, akár linkekkel az egyes felhasználók oldalára. én ezt veszélyesnek tartom, többek között azért, mert így nagyon gyorsan begyűjthetőek a felhasználók elérhetőségei. (plusz olyan dolgok miatt is, hogy ha elég sok felhasználód van, akkor ugye lapokra szervezed a listát, és akkor a felhasznalok/34/-et meg kell külöbnöztetned a felhasznalok/im34/-től, ami ugyan programozásilag egyátalán nem nehéz, mindenesetre ráfest pár ráncot a szépurl-ed arcára)
2. dobsz neki egy not allowed üzenetet. ezt is természetesen barátságos hibaüzenetként. így az egyszeri felhasználónak nincs lista, slussz, passz. persze ilyen higher jogokkal megálldott überuserek, mint adminok ésatöbbi, azok láthatják a listát. ez a mezei úser szempontjából egy az egyben 404 érzés. talán a megfelelő megfogalmazással icipicit jobb.
3. dobod neki a fent említett 404-et. nincs ilyen oldal, vagy az oldal ebben a paraméterezésben (pl: user modulként kezelve, és nincs meg a megfelelő paraméter, ami itt a nick, szóval ha nem kezeled le, még simán hibás programfutást is eredményezhet)
4. kultúráltan a saját profil oldalára irányítod, vagy egyszerűen azt szolgálod ki neki
5. valami tök egyéb, felhasználókra vonatkozó dolgot dobsz ki neki, ami belefér a /felhasznalok/ kategóriába bár ezt nem tartom szerencsésnek. (esetleg keresőt, bizonyos adatok alapján, ha az oldal közösségi jellegű, de nem teljes listát)

a fentiekhez hozzátartozik, hogy ha konzekvensen nem teszel ki linket a sima /felhasznalok/ oldalra, akkor ugye csak direktbe bepötyögéssel jöhet oda, ami már magában is gyanús lehet (nem mondom, hogy egy külön betöréses-logba kell tenni, de ugye szándékosan kerül arra az url-re), és ugye ha így ér oda, akkor tisztában van a helyzettel. részemről a 404/403-at találom a legszerencsésebbnek, vagy közösség orientált oldalon egy felhasználó-keresőt. remélem elég kimerítően körbejártam a témát :)

maradok tisztelettel
winston
5

Ami tetszett a válaszodban

inf · 2007. Szep. 2. (V), 00.46
kultúráltan a saját profil oldalára irányítod, vagy egyszerűen azt szolgálod ki neki

szerintem ha nem közösségorientált (szóval nincs kereső), akkor ez a legjobb megoldás, mert mégsem hibaoldal, vagy ilyesmi.
6

link

winston · 2007. Szep. 2. (V), 10.32
azt azért vedd figyelembe, hogy ha nem raktál ki linket, ami arra az oldalra mutat, és ő böngészőben beírja, kézzel, akkor ennyi erővel bármilyen oldalra ki kell szolgálnod valamit neki, pl.: domain.tld/kmsagalkslsaklgjsagkjjags/ -ra is kapjon valami értelmeset. szóval azért érdemes mérlegelni. persze, ha kikerül egy link rá, akkor az mindjárt már. akkor már nem lehet 404
7

Végül

Joó Ádám · 2007. Szep. 2. (V), 12.41
Végül arra jutottam magamban, hogy mivel a felhasznalok/ kvázi egy mappa, ezért lehet üres, attól még létezik. Ilyenformán egyszerűen kiírom, hogy nincsenek a rendszerben felhasználók, a fejléc marad 200.
8

mappa

winston · 2007. Szep. 2. (V), 13.00
szvsz ez hibás megoldás, mert hamis információt adsz a felhasználónak. az helyes megközelítés véleményem szerint, hogy mappaként kezeled, de nem igaz, hogy nincsenek benne felhasználók. az viszont igaz, hogy a nézőnek nincs olvasási joga hozzá, ezért azt mondod neki, hogy 403: "Nincs jogod a felhasználók listájának megtekintéséhez".
9

Nem jog

Joó Ádám · 2007. Szep. 2. (V), 16.37
Félreérted, ahogy azt az elején írtam, tényleg nincsenek felhasználók (cikkek, blogbejegyzések, fórumok, termékek stb.) a rendszerben, nem arról van szó, hogy nincs joga a megtekintésükhöz. Ebben az esetben természetesen 403 lenne.
10

Üres kollekció

vbence · 2007. Szep. 2. (V), 19.16
Ha mindenképpen az adatbázis állapotát szeretnéd status kódokkal lefesteni, akkor használd az üres könyvtár analógiáját. A /felhazsnalok létezik, nem ugynaaz, mintha azt mondta volna, hogy /asdsadsfds. Amúgy sem szerencsés 4xx-et adni olyan címre, amire linkek mutatnak az oldalon belül. Ha a 200 nem mond eleget, használhatod a 204-et (No Content), de ez egyáltalán nem bevett megoldás.
11

204 nem jó

Joó Ádám · 2007. Szep. 2. (V), 21.10
204 No Content

The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. The response MAY include new or updated metainformation in the form of entity-headers, which if present SHOULD be associated with the requested variant.

If the client is a user agent, it SHOULD NOT change its document view from that which caused the request to be sent. This response is primarily intended to allow input for actions to take place without causing a change to the user agent's active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent's active view.

The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields.


Mint azt írtam, a felhasznalok/-nél maradok is a 200-nál.