Foros del Web » Programando para Internet » PHP »

No puedo obtener un HEADER de mi servidor...

Estas en el tema de No puedo obtener un HEADER de mi servidor... en el foro de PHP en Foros del Web. Hola a todos... a ver si alguno sabe por que razon puede estar pasando esto: Intento obtener [If-Modified-Since] para un sistema de cacheo... lo intenté ...
  #1 (permalink)  
Antiguo 17/04/2006, 03:31
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 13 años
Puntos: 2
No puedo obtener un HEADER de mi servidor...

Hola a todos... a ver si alguno sabe por que razon puede estar pasando esto:

Intento obtener [If-Modified-Since] para un sistema de cacheo... lo intenté de dos formas:

1.

Código PHP:
 $headers apache_request_headers();
 
$if_modified_since preg_replace('/;.*$/'''$headers['If-Modified-Since']); 
2.
Código PHP:
 $_SERVER['HTTP_IF_MODIFIED_SINCE'
Ninguna de estas dos formas me devuelve si quiera un solo caracter...
Otro dato, si hago :
Código PHP:
<?php
$headers 
apache_request_headers();

foreach (
$headers as $header => $value) {
   echo 
"$header: $value <br />\n";
}
?>
Obtengo las cabeceras, pero no aparece nada parecido a IF MODIFIED SINCE.


¿Tal vez estoy totalmente desorientado?

¿Tal vez tenga algo que ver la configuracion de mi servidor?

Se que usan Apache 1.3.34, y PHP4

Un saludo y gracias por la ayuda que pudieran darme.
  #2 (permalink)  
Antiguo 17/04/2006, 05:15
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
No vas a poder obtener esa cabecera de ninguna de las dos formas así como así.

Para que un navegador o un buscador te entregue la cabecera if-modified-since necesitas éste tenga una copia previa de tu contenido y el dato de última modificación que tú expresamente debes enviar.

Digamos que yo soy un navegador, por ejemplo el IE (huyyyy no, qué asco, mejor no soy IE), digamos que mejor soy FireFox, ¿vale?

Yo solicito a tu servidor un documento y tu servidor mira quién soy y me lo entrega. Fácil, ¿no?

Ahora, si tu servidor me entrega el documento con información de última modificación (esto sucede automáticamente en documentos html estáticos, imágenes, etc.) entonces yo como navegador me quedo con el documento que me enviaste y con el dato de última modificación (last-modified). Hasta ahora yo no te he enviado ninguna cabecera, ¿ok?

Ahora, nuevamente solicito a tu server el documento. Pero miro en mis archivos y veo que ese documento ya lo tengo y estoy pidiendo una solicitud de algo que ya tengo, entonces te mando junto con mi solicitud una cabecera if-modified-since con el dato que tú previamente me has enviado y ahora sí, tú ya puedes leer la cabecera que te he enviado y tomar la decisión de enviarme un código 200 o un 304.

De manera que tu script debe enviar un:

header("Last-Modified: $ultima_modificacion"); SIEMPRE

Pero no siempre obtendrás de mí una cabecera if-modified-since, sólo cuando yo ya tenga previamente dos cosas: la información que solicité a tu server y el dato de última modificación generado con la última cabecera que en negritas que puse.

Saludos cuate.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #3 (permalink)  
Antiguo 17/04/2006, 18:08
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 13 años
Puntos: 2
Yo sabiiiia que la mano venia por ahi... !!

Ahora si entiendo, MUCHAS GRACIAS unamistad!!!!!!!!!!!!!!!!!!
Me has dado una gran enseñanza :D

Saludos!!!
  #4 (permalink)  
Antiguo 17/04/2006, 19:33
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 13 años
Puntos: 2
Una pregunta mas... y ya te prometo que no vuelvo a preguntarte mas nada :D


¿Que pasa cuando el .PHP que revisa si hay que CACHEAR o no esta recibiendo datos de un $_POST o $_GET ? ¿Definitivamente no se puede usar la funcion de cachear verdad?

Estuve leyendo un sitio y recomiendan no usar POST, usar por contrario GETs, pero eso tampoco me sirvio.

Un saludo
  #5 (permalink)  
Antiguo 17/04/2006, 22:10
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
Sí la puedes usar. Si tú tuvieras tu web personal llamada google.com y hacemos búsquedas (y usas GET) pues se estarían cacheando en realidad varias páginas en el cliente:

1) google.com
2) google.com/?busca=aves
3) google.com/?busca=musica
.
.
.

Muchas páginas diferentes para el navegador, cada una podría incluir cabeceras last-modified y por lo tanto ser suceptible de ser cachear 'cacheada' por él.

En la página que me pasaste lo dicen mejor de lo que lo podría decir yo:

Don’t use POST unless it’s appropriate. Responses to the POST method aren’t kept by most caches; if you send information in the path or query (via GET), caches can store that information for the future.


Qué curioso, cuando no tenía idea de qué era eso del if-modified-since, pregunté aquí en el foro y me respondió Clúster mostrándome una página en la que lo implementaban y ahí tenían la misma liga que me has pasado. Esa info es invaluable, parece que no es en vano su PageRank 7.


Así que viendo todos los beneficios de usar if-modified-since, creo no hay que subvalorar el cacheo real que explican en esa página. O sea, permitirle a la página que se pueda cachear en el cliente durante tres horas por ejemplo, de esa manera, la carga en su navegador será inmediata y sólo después de que pasen esas tres horas, se le solicitará al servidor explícitamente una recarga de la página, pero aquí es donde entra nuestro amigo el if-modified-since y el servidor, de manera inteligente, le preguntará al cliente:

-(server) A ver muchachito, ¿qué no nos conocemos desde antes?

-(navegador) Sí señor, hace como tres horas le solicité a usted información. Aquí le muestro mediante un if-modified-since la hora exacta de mi pedido.

-(server) Mmmm.... déjame echar un vistazo... Ohhh, mira, por ahora el documento que tienes en tu caché sigue estando válido, por lo que voy a ignorar tu petición (code 304), usa por favor el documento que tienes en tu caché.

-(navegador) Ok señor, disculpe las molestias. No lo vuelvo a molestar durante las próximas 3 horas, a menos que mi dueño (el usuario) esté picándole a la tecla F5, lo que ocasionaría que yo tuviera que venir antes a molestarlo.


No sé si me explico. Es usar todo el paquete, permitirle al navegador cachear por X tiempo con Pragma: cache y con max-age:#seconds.

Sorry por hacer los diálogos así tan tontos, pero es la forma en la que me lo imagino, como si estuvieran platicando, =P Suerte compadre !
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #6 (permalink)  
Antiguo 18/04/2006, 00:57
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 13 años
Puntos: 2
Ya lo dijiste todo ! je

Bueno, se ve que el error esta en mis scripts... mejor me voy a re-leer todo el documento y voy a crear algunos archivos más de prueba... tiene que funcionar para los forms !

Saludos, y un sinfin de gracias por tu buena onda uamistad! :)
  #7 (permalink)  
Antiguo 18/04/2006, 01:04
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
Por nada cuate. Cuando se te ofrezca. Es sólo una gota de agua lo que deja mi aportación en este foro a cambio de tantos litros de conocimiento que bebo todos los días del mismo.

Jajaja, qué mam.n se oyó eso. Saludos brother.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:58.