Avatar billede tjens Nybegynder
16. september 2003 - 15:48 Der er 5 kommentarer og
1 løsning

no-cache for jpeg-billede i XHTML

Mit motorstyrede webcam sender XHTML, så jeg kan dreje kameraet og se billeder på wap 2.0 telefoner.
På f.eks Nokia 3650 virker det fint.

MSIE6 kan også vise samme XHTML, men så hentes der ikke en ny jpeg, fordi den er cashed i browseren.

Min XHTML ser således ud:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html  PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd">

<html>
<head><title>Moving Cam</title>
<meta http-equiv="expires" content="Sat, 31 Dec 2000 21:29:02 GMT">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
</head>
<body>
<center>
<a href="cam2/lastsnap.jpg" target="pics"><img src="cam2/lastmini.jpg"/></a><br />
<form name="motor" action="mpan.php" method="get">
<input type="submit" name="position" value="01"/>
<input type="submit" name="position" value="10"/>
<input type="submit" name="position" value="60"/>
<input type="submit" name="position" value="80"/>
<input type="submit" name="position" value="125"/>
<input type="hidden" name="size" value="320" />
</form>
</center>
</body>
</html>

Som I kan se har jeg prøvet med flere meta tags, men min MSIE6 på WinXP reagerer ikke derefter. Hvis jeg sletter cashen via 'Tools/internet options/general/delete files' virker det første gang jeg bevæger kameraet.

Findes der andre 'no-cache' tricks som meta tag, eller f.eks på selve <img> tagget?

PS. jeg er offline fra kl.16-20 i dag
Avatar billede thulstrup Nybegynder
16. september 2003 - 17:37 #1
Prøv at sæt content="0" i dit expires meta tag. Altså:
<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">

Hvis det ikke hjælper så prøv denne JavaScript løsning:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html  PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd">

<html>
<head><title>Moving Cam</title>
</head>
<body>
<center>
<script language="JavaScript">
var rand = Math.floor(Math.random()*99999999999999999);
var str="";
str+='<a href="cam2/lastsnap.jpg" target="pics"><img src="cam2/lastmini.jpg?nocache='+rand+'"/></a><br />';
document.write(str);
</script>

<form name="motor" action="mpan.php" method="get">
<input type="submit" name="position" value="01"/>
<input type="submit" name="position" value="10"/>
<input type="submit" name="position" value="60"/>
<input type="submit" name="position" value="80"/>
<input type="submit" name="position" value="125"/>
<input type="hidden" name="size" value="320" />
</form>
</center>
</body>
</html>

Du kan også lave det med et serverside sprog så som PHP eller ASP.
Avatar billede tjens Nybegynder
16. september 2003 - 21:41 #2
Desværre virker dit forslag til Expires content heller ikke.
Jeg begynder at tro, at det er en fejl i MSIE.

Jeg var begyndt, at arbejde med en ekstra random parameter på linksene sådan her:

<a href="imagejpeg.php?name=lastsnap.jpg&path=cam2&rnd=t619862896" target="pics" >
<img src="imagejpeg.php?name=lastmini.jpg&path=cam2&rnd=t1403927397"/></a><br />
hvor jeg så bruger et ekstra php-script til outputte billedet (og ignorere randomnummeret :)
<?php
Header ("Content-type:image/jpeg");
$fn = $_GET["path"].'/'.$_GET["name"];
readfile('./'.$fn);
?>

Du foreslår, at jeg sætter en GET variabel med randomnummer direkte på IMG-src tagget, og det har jeg også testet nu, og det virker fint.
Jeg var i tvivl om Apache kunne acceptere et sådant link, men det virker.

Jeg bryder mig dog ikke om loophole programmering og omveje som dummy random GET variablen: Der må da være en måde at få MSIE til at lade være med at cache en jpeg?

PS.: Jeg kan ikke bruge javascript, da min applikation er XHTML primært til WAP 2.0 telefoner.

PSPS: Loophole programmering er at udnytte fejl i operativsystemer og compilere til at opnå det man vil. Og straffen er altid, at om 4 år efter en opgradering, virker det ikke mere, og ingen kan gennemskue hvorfor.
Avatar billede thulstrup Nybegynder
16. september 2003 - 22:27 #3
Jeg har hellere aldrig syntes, at det virkede specielt godt med meta tags, men ifølge MS så burde det her gøre tricket:

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q234/0/67.ASP&NoWebContent=1
Avatar billede tjens Nybegynder
16. september 2003 - 23:08 #4
Det hjalp desværre heller ikke med -1.
Ud fra den side du linker til ser det ud som om meta tags er på vej ud, og man i stedet skal bruge header info.

Jeg fandt linket http://www.zend.com/manual/function.header.php
og prøvede

header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

i toppen af min php source, men det hjalp heller ikke.

MSIE6 er bare ligeglad og husket det gamle billede :(

Jeg har også tilføjet

// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// always modified
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

men uden held.
Avatar billede tjens Nybegynder
17. september 2003 - 15:07 #5
Jeg har fået løst problemet:

Header(expires: -1) skal angives for jpeg objektet, og ikke for html objektet :-O

Lige nu er jeg altså nødt til at bruge PHP til at outputte jpeg objektet, og sætte expires headeren på:

<?php
Header ("Content-type:image/jpeg");
header("Expires: -1");
$fn = $_GET["path"].'/'.$_GET["name"];
readfile('./'.$fn);
?>

Så behøver linket ikke have noget random nummer, og MSIE henter et nyt billede hver gang.

Løsningen her burde være at Apache kunne konfigureres til at sende den specielle expires header med hver gang billedet hentes.

Så ville den originale XHTML virke.

Webcam billede er jo også en anormal situation, idet billeder plejer at være det mest statiske på et website.
Avatar billede tjens Nybegynder
20. september 2003 - 23:11 #6
Jeg har fundet en bedre løsning, som ikke berører PHP eller HTML:
Expires konfiguration af Apache per directory:

http://www.eksperten.dk/spm/403466
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel