Newsgroup: it.comp.lang.javascript
Titolo: XMLHttpRequest.status... gestione errori...

salve,
la mia richiesta è molto semplice, ma nn so come risolverla e nemmeno se 
sia possibile...
avete presente che l'oggetto XMLHTTP restituisce al termine del 
caricamente lo status di pagina, con i seguenti codici:
404 > pagina non trovata
200 > pagina ok
500 > errori....etc.etc..
beh, il mio problema è che nei siti dove uso la gestione della pagina di 
errore 404 con reindirizzamento ad una pag esistente, l'errore 404 non 
mi viene generato mai.. e anche se la pagina che richiedo non c'è, mi 
trovo un bel 200 che però mi restituisce la mia pag di errore...
Percoò volevo sapere se è possibile capire quando la pagina è realmente 
una 200 oppure se è una 404 "cammuffata" da 200.
P.S. x ora ho trovato una soluzione, ma è + una "cammellata" :) che una 
vera soluzione... cioè funziona ma mi costringe ad inserire nella pag di 
errore dei codici di controllo che mi permettono poi di distingere la 
200 "vera" dalla 200 "falsa".
tnx 4 all
simple_maL

 200 "vera" dalla 200 "falsa".
non vedo altre strade
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 non vedo altre strade
peccato.. speravo in un'idea migliore....
come fa google ad identificare con i suoi spider le pag 200 inviate dal
server in cambio di una 404??
grazie cmq
simple_maL

 una 200 oppure se è una 404 "cammuffata" da 200.
Se ritorni un 404 secondo me non devi fare un redirect, fai un 302. Ma
detto questo tu sei sicuro di ritornare un 404? Controlla.
Es
faser@jf-sebastian:~> telnet 
www.corriere.it
 80
Trying 194.20.158.101...
Connected to 
www.corriere.it
.
Escape character is '^]'.
HEAD / HTTP/1.0 [premi enter 2 volte]
HTTP/1.1 200 OK
Date: Fri, 05 May 2006 23:06:19 GMT
Server: Apache/2.0.46
Accept-Ranges: bytes
Connection: close
Content-Type: text/html; charset=.iso8859-1
faser@jf-sebastian:~> telnet 
www.corriere.it
 80
Trying 194.20.158.101...
Connected to 
www.corriere.it
.
Escape character is '^]'.
HEAD /nonesiste.html HTTP/1.0
HTTP/1.1 404 Not Found
Date: Fri, 05 May 2006 23:05:10 GMT
Server: Apache/2.0.46
Accept-Ranges: bytes
Connection: close
Content-Type: text/html; charset=.iso8859-1
Ad ogni modo con xhr non sei costretto a fare un GET, fai prima un HEAD.
-- 
--
FABIO SERRA
Per rispondere in e-mail sostituire "invalid" con "faser"
*Questo testo deve essere valutato secondo il senso della RFC-3*
------------------

 una 200 oppure se è una 404 "cammuffata" da 200.
Come ti dicevo, non è una questione client side, è una problematica del tutto
server side. E' là che devi agire.
-- 
"E' un vero peccato che tutte le persone che sanno come far funzionare 
il Paese siano troppo occupate a guidare taxi o a tagliare capelli."
(George Burns)

 > To ZERO e Fabbio Serra
Grazie per le risposte,
mi leggo la cosa e vedo di trovare una solutio..
io il redirect lo faccio con .htaccess
forse li sbaglio qualcosa nella sintassi..
ErrorDocument 404 
http://www.miosito.com/esempio.html
si può ottimizzare la cosa per passare un head corretto??
Se riesco a risolvere direttamente così ok..
altrimenti provo con HEAD a fare un preCaricamento della pag x 
verificarne l'esistenza, prima di effettuare il GET o il POST.
Grazie ancora ad entrambi!
ciao
simple_maL

 verificarne l'esistenza,
E che ti cambia? Anche facendo una richiesta con HEAD, otterresti sempre
status 200, se non modifichi il comportamento dal server.


ZER0 ha scritto:
 > E che ti cambia? Anche facendo una richiesta con HEAD, otterresti sempre
 > status 200, se non modifichi il comportamento dal server.
Hai ragione, pardon nn avevo focalizzato...
 > <?php
 > header("HTTP/1.0 404 Not Found");
 > ?>
 > <?php
 > header("Status: 404 Not Found");
 > ?>
Ottimo... è quello che mi serve..
anche se io come error document solitamente vado su una pagina del 
sito... (sempre tutto PHP)...
eventualmente posso passare a tale pag, diciamo una home con tutto 
l'albero del sito, una var che, se impostata, mi fa cambiare l'header...
sisis, ottimo...  dovrebbe andare
grazie per il suggerimento!!!
alla prossima
ciao
simple_maL

 sisis, ottimo...  dovrebbe andare grazie per il suggerimento!!!
De nada.


 
allora.. nn funziona.. :|
non ne capisco il motivo, ma non funziona..
ho fatto così:
- nell'.htaccess ho scritto:
ErrorDocument 404 
http://www.miosito.ext/miahome.php?errorpage=404
- nel modulo che includo in tutte le pag che contiene l'head del sito ho 
sctitto:
if ($_GET['errorpage']=="404")) header("Status: 404 Not Found");
ma l'oggetto XMLHTTP mi restituisce lo status 200 anche su una pag 
inesistente, caricandomi la pag miahome.php?errorpage=404
cosa sbaglio?
grazie ancora
simple_maL

 ErrorDocument 404 
http://www.miosito.ext/miahome.php?errorpage=404
Prova, giusto per test, a fare una pagina php vuota, evitando di passare
parametri (err.php). E nella pagina inserire l'header in questione, senza
condizioni di sorta. Qualcosa tipo:
<?php
	header("Content-Type: text/html");
	header("Status: 404");
?>
E vediamo un po' che dice.


 grazie ancora
Per prima cosa assicurati che il server restituisca veramente un 404
alla prima GET.
Se non vuoi fare telnet (che hai anche da DOS) usa l'extension per
firefox LiveHTTPHeaders (
http://livehttpheaders.mozdev.org/
) che ti fa
vedere in modo semplice tutto quello che passa tra il client ed il
server. Quindi chiama la pagina inesistente direttamente con il browser.
Ad ogni modo ho fatto una prova
Se cerchi una pagina non esistente in
http://faser.net/public/tmp/non_esiste/pippo_non_esiste.html
Via Apache ti ritorna la pagina di errore custom settata come dici tu:
ErrorDocument 404 /public/tmp/non_esiste/non_trovata.html
Con un chiaro 404.
Se provi XHR (Firefox only) vedi che ritorna lo status esatto
http://faser.net/public/tmp/non_esiste/test_xhr.html
quando chiama pippo_non_esiste.html
Ciao.


 ?>
strano risultato.. sono in confusione personalmente..
ho usato live HTTP headers come suggerito da Fabio... (tnx)
e mi risulta:
HTPP/1.x 200 OK
Date ....
Server: Apache
X-Powered-By: ..
Status: 404
ma quando esamino lo status così:
switch (JxHttpRequest.status)
{
   case 404:
     alert("Errore: non trovo il file '" + JxUrl + "'");
     break;
   case 500:
   case 200:
     ....
mi va direttamente al 200!!!
mentre se ho errori vado giustamente al 500...
quindi sono mooooolto confuso..
grazie ad entrambi per i suggerimenti
simple_maL

 HTPP/1.x 200 OK
E' questo il problema (tranne l'ovvio errore di sintassi che hai fatto :P ).
Dovrebbe restituirti:
HTTP/1.x 404 Not Found
E non 200.
Sembra comunque che ci sia qualcosa che non va a livello di impostazioni
server.
Se hai provato solo con header("Status: 404"), prova anche con:
	header("HTTP/1.0 404 Not Found");
Verifica cmq lo status che ricevi in javascript con un banale alert:
	alert(JxHttpRequest.status);
Nota:
Secondo la nomenclatura utilizzata in java e in javascript, la lettera
maiuscola iniziale si utilizza solo per le "classi" o comunque oggetti dai
quale derivare istanze.
Le istanze di oggetti, le proprietą ed i metodi, hanno la prima lettera sempre
minuscola.


 
perdonami, ma a quale errore di sintassi ti riferivi?
grazie e scusa
simple_maL
P.S. sto' ancora combattendo con quella pag 404!!

 P.S. sto' ancora combattendo con quella pag 404!!
Che headers ricevi impostando l'header come ti ho indicato nell'ultimo post?


 On Wed, 10 May 2006 10:28:19 +0200, simple:maL wrote:
funziona!
con "HTTP/1.x 404 Not Found" va una meraviglia!
inoltre penso sarà molto utile anche per i motori, che potranno 
cancellare + velocemente dai loro db le pag.non + disponibili.
grazie ancora
ciao
simple_maL