Una URL me devuelve StatusCode 200 cuando en realidad es 404, ¿Porque y como?.

Iniciado por Eleкtro, 25 Mayo 2013, 17:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Hola

A ver si los entendidos en http me pueden ayudar a salir de dudas.

Fíjense en esta url: http://www.mp3crank.com/releases/12549/page/1

Fíjense especiálmente en el número 12549, el cual me lo he inventado, pero lo comento porque para testear lo siguiente que voy a explicar hay que cambiar dicho número de la url por cualquier otro número (o bueno, cualquier otra parte de la url para que tire un error 404, pero eso me ha parecido la más fácil de sugerir como referencia).

Bien, el problema es que esa url devuelve un código 404 la primera vez que intento acceder a ella (obtener la respuesta desde un lenguaje de programación), si intento obtener la respuesta una segunda vez, lo que me devolverá es un código 200 (success) SIEMPRE.

Esto es incomprensible para mi porque no sé lo suficiente a nivel web, y a la única conclusión a la que he llegado ha sido esta:

Cita de: EleKtro H@cker en 25 Mayo 2013, 16:13 PM
...Esto no tengo ni idea de porque sucede, imagino que el servidor detecta que se ha intentado acceder a una página que no existe, y entonces por algún extraño motivo se crea automáticamente esa página de forma temporal para devolver el código "200" las siguientes veces?, hasta ahí llega mi imaginación, no lo sé.

¿Alguien me puede explicar de forma sencilla porque un servidor primero envía error 404 y luego en todos los demás intentos devuelve un 200?, ¿Esto es algo normal?

Y lo más importante, aunque no supieran de programación, ¿Se os ocurre como puedo verificar si la página reálmente existe mediante un lenguaje de programación aunque la url me lanze un "200?,
...por ejemplo: "si Elektro, busca X cosa en los headers para verificarlo", o cosas así, cualquier información me sirve, pero no sé por donde empezar... porque la respuesta que me va a dar es un maldito "200", así que...

Gracias por leer.








#!drvy

Me atrevo a decir que es por un sistema de cache a nivel servidor. Vamos, que una vez te ha servido la 1a respuesta, la cachea durante X tiempo y mientras dure te devuelve la pagina cacheada.Tiene su lógica porque cualquier parámetro que cambies hace que te vuelva a generar un 404 (tanto 12549 como /1).

Y ademas se puede ver que usa W3 Total Cache xD

view-source: http://www.mp3crank.com/releases/199949/page/3
Código (html4strict) [Seleccionar]
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/
Page Caching using disk: enhanced


Realmente no se si podrás encontrar una forma de detectar cuando es un 404 aparte de mirar el codigo fuente y buscar palabras clave. Por ejemplo, http://www.mp3boo.com/wp-content/themes/mp3boo/images/404.jpg esta ruta/imagen no creo que aparezca en el resto de la pagina..

Saludos

Eleкtro

#2
Gracias por la información drvy | BSM

EDITO: Lo de la imágen es lo primero que pensé (por ser lo más sencillo de detectar para mi nivel), pero no me parecía el método más eficiente, ahora me doy cuenta según tus palabras que es más dificil de lo que parece y lo mejor es verificar la imágen.

Doy esto por solucionado,
Un saludo!








#!drvy

Se me olvido mencionarte que puedes forzar siempre una copia fresca. Las implementaciones de cache suelen ser bastante sensibles (en realidad depende de como se configure xD) por tanto si añades una variable GET random.. suele retornarte una respuesta fresca.

Asi mismo.. si llamas dos veces esto
http://www.mp3crank.com/releases/32131

La primera vez te retornara 404 y luego 200.. pero si lo llamas así
http://www.mp3crank.com/releases/32131?variable=numeroaleatorio

Siendo numeroaleatorio un rand.. pues te retornara siempre un 404 (siempre y cuando no exista realmente). Y si existe te lo retornara tan normal porque va a ignorar totalmente esa "variable".

Saludos

Eleкtro

Cita de: drvy | BSM en 25 Mayo 2013, 22:59 PM
La primera vez te retornara 404 y luego 200.. pero si lo llamas así
http://www.mp3crank.com/releases/32131?variable=numeroaleatorio

Siendo numeroaleatorio un rand.. pues te retornara siempre un 404 (siempre y cuando no exista realmente). Y si existe te lo retornara tan normal porque va a ignorar totalmente esa "variable".

que truco más bueno lo del random, esto ya es otra cosa, me la apunto xD