Toon posts:

[http] image caching haalt chrome onderuit

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 02-08-2021
Nog maar weer een topic, aangezien het wel een ander probleem is dan mijn vorige.
Na dit topic:
[http] images uit DB, hoe te cachen?

Heb ik de volgende situatie gecreerd:
Caching lijkt te werken onder alle browsers, alleen helpt mijn caching google chrome onderuit.

dwz:
Ik heb een testpagina gemaakt, waarop ik twee afbeeldingen laad via twee scriptjes:
In de eerste zit caching, in de tweede niet.

Wanneer je in chrome kijkt zie je dat na het laden van beide, chrome de eerste afbeelding weer verwijderd, en een kruisje laat zien.
In alle andere browsers gaat het goed.

de code van afbeelding 1:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?
    if(isset($_GET['id']))
    {
        include 'ucms_admin/inc/config.php';
        include 'ucms_admin/inc/funcs.php';
        include 'ucms_admin/inc/connect.php';
        
        $id    = mysql_real_escape_string($_GET['id']);
        $query = "SELECT *, UNIX_TIMESTAMP(timestamp) as ticks FROM `" . $ucms_cfg['prefix'] . "image_image` WHERE id = $id";
        
        $row = mysql_fetch_object(mysql_query($query));

        // we get check HTTP
        // If-Modified-Since header
        // and do not send image
        // if there is a cached version
        
        $rh = getHeaders();
        
        if (isset($rh['If-Modified-Since']) && // If-Modified-Since should exists
            $rh['If-Modified-Since'] != '' && // not empty
            strtotime($rh['If-Modified-Since']) >= $row->ticks) // and grater than
        {
            // Sending 304 response to browser
            // "Browser, your cached version of image is OK
            // we're not sending anything new to you"
            header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $row->ticks) . ' GMT', true, 304);
     
            exit();
        }
        
        $maxage = 60*60*24*365;
        
        //header('Age:' . time()-$row->ticks);
        header('Cache-Control:max-age='.$maxage.', public');
        header('Content-Length:'.strlen($row->image));
        header('Content-Type:'.$row->type);
        header('Date:' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
        header('Expires:' . gmdate('D, d M Y H:i:s', time() + $maxage) . ' GMT');
        header('Last-Modified:' . gmdate('D, d M Y H:i:s', $row->ticks) . ' GMT');
        
        //header('ETag: "'.md5($row->id).'"');
        header('Pragma:max-age='.$maxage.', public'); 
        
        switch ($row->type)
        {
            case "image/gif": header("Content-disposition: inline; filename=".$row->id.".gif"); break;
            case "image/jpeg": header("Content-disposition: inline; filename=".$row->id.".jpg"); break;
            case "image/png": header("Content-disposition: inline; filename=".$row->id.".png"); break;
        }
        
        echo $row->image;
        exit;
    }
?>


en afbeelding2 (zonder caching)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
    if(isset($_GET['id']))
    {
        include 'ucms_admin/inc/config.php';
        include 'ucms_admin/inc/funcs.php';
        include 'ucms_admin/inc/connect.php';
        
        $id    = mysql_real_escape_string($_GET['id']);
        $query = "SELECT * FROM `" . $ucms_cfg['prefix'] . "image_image` WHERE id = $id";
        
        $row = mysql_fetch_object(mysql_query($query));
        
        echo $row->image;
        exit;
    }
?>

This message was sent on 100% recyclable electrons.


Acties:
  • 0Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
For some reason mist er in 't geval van getImage.php 7 bytes aan 't einde van het plaatje, aldus WireShark.

En wget maakt dit er van:

user@desktop tmp $ wget http://bulahprint.nl/getImage.php?id=167
--2011-05-13 12:05:59--  http://bulahprint.nl/getImage.php?id=167
Resolving bulahprint.nl... 70.84.233.18
Connecting to bulahprint.nl|70.84.233.18|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 137764 (135K) [image/png]
Saving to: &#8220;getImage.php?id=167&#8221;

74% [==========================================================>                    ] 103.322     18,9K/s   in 5,3s    

2011-05-13 12:06:05 (18,9 KB/s) - Connection closed at byte 103322. Retrying.

--2011-05-13 12:06:06--  (try: 2)  http://bulahprint.nl/getImage.php?id=167
Connecting to bulahprint.nl|70.84.233.18|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 137764 (135K) [image/png]
Saving to: &#8220;getImage.php?id=167&#8221;

74% [==========================================================>                    ] 103.322     18,8K/s   in 5,4s    

2011-05-13 12:06:12 (18,8 KB/s) - Connection closed at byte 103322. Retrying.

--2011-05-13 12:06:14--  (try: 3)  http://bulahprint.nl/getImage.php?id=167
Connecting to bulahprint.nl|70.84.233.18|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 137764 (135K) [image/png]
Saving to: &#8220;getImage.php?id=167&#8221;

74% [==========================================================>                    ] 103.322     29,5K/s  eta 1s      ^C
user@desktop tmp $ wget http://bulahprint.nl/getImage2.php?id=167
--2011-05-13 12:06:21--  http://bulahprint.nl/getImage2.php?id=167
Resolving bulahprint.nl... 70.84.233.18
Connecting to bulahprint.nl|70.84.233.18|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: &#8220;getImage2.php?id=167&#8221;

    [   <=>                                                                         ] 103.322      168K/s   in 0,6s    

2011-05-13 12:06:22 (168 KB/s) - &#8220;getImage2.php?id=167&#8221; saved [103322]

user@desktop tmp $ 


Klopt de Content-Length wel?

Volgens Wireshark geeft getImage.php een Content-Length van 137764 mee en getImage2.php stuurt er géén mee.

Verschil in bytes in Wireshark zou kunnen komen doordat getImage2.php een Transfer-Encoding chunked gebruikt.

Maar d'r is iig iets mis :+

[Voor 5% gewijzigd door Osiris op 13-05-2011 12:11]


Acties:
  • 0Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 02-08-2021
oooooooooooww (ff testen)
zou wel 't een en ander verklaren

edit:
yup zo werkt ie wel. :)

many thanks. Ik denk dat ik hem maar helemaal weglaat, aangezien voor afbeeldingen niet zo heel interessant is om te weten

[Voor 57% gewijzigd door BasieP op 13-05-2011 12:11]

This message was sent on 100% recyclable electrons.


Acties:
  • 0Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Heb je mbstring.func_overload aan staan?
http://www.php.net/manual/en/mbstring.overload.php

[offtopic]
De E-Tag zou ik op basis van $row->image doen ipv $row->id

Acties:
  • 0Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 02-08-2021
ReenL schreef op vrijdag 13 mei 2011 @ 12:11:
[offtopic]
De E-Tag zou ik op basis van $row->image doen ipv $row->id
hoezo? id is toch uniek? of moet zoiets over hele domeinen uniek zijn oid?

This message was sent on 100% recyclable electrons.


Acties:
  • 0Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Heb je mbstring.func_overload aan staan?
http://www.php.net/manual/en/mbstring.overload.php

md5($row->id) veranderd niet als je het plaatje wijzigd, md5($row->image) wel.

Acties:
  • 0Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
BasieP schreef op vrijdag 13 mei 2011 @ 12:09:
many thanks. Ik denk dat ik hem maar helemaal weglaat, aangezien voor afbeeldingen niet zo heel interessant is om te weten
Zet hem gewoon goed neer? 8)7

{signature}


Acties:
  • 0Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 02-08-2021
niet dat ik weet, maar het is gewoon webhosting. Ik kan dat niet aanpassen (iig niet dmv php.ini)[/]
md5($row->id) veranderd niet als je het plaatje wijzigd, md5($row->image) wel.
true. Momenteel is het niet zo dat je images kunt wijzigen, maar dit wordt in de toekomt misschien zo.
Ga ik idd ff fixen :)
Voutloos schreef op vrijdag 13 mei 2011 @ 13:21:
[...]
Zet hem gewoon goed neer? 8)7
enige reden dat je die header meestuurt is om een download tijd te kunnen gokken... niet echt heel erg nuttige toevoeging voor een afbeelding die toch embedded is in de site

[Voor 44% gewijzigd door BasieP op 13-05-2011 15:17]

This message was sent on 100% recyclable electrons.


Acties:
  • 0Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Of, zoals je nu juist gemerkt hebt, je browser kan er fouten mee ontdekken. B) En misschien wel ook tijdens het laden van een hele pagina de voortgang beter inschatten. Etc. etc. Het is een kleine moeite om het goed te doen.

{signature}


Acties:
  • 0Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
De reden dat ik dat vraag mbt mbstring.overload is dat multibyte characters dan als 1 geteld worden met strlen.

var_dump(ini_get('mbstring.func_overload'));

<?php mb_strlen($string, '8bit'); ?> zou de correcte lengte geven

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 31-05 23:51

krvabo

MATERIALISE!

Als je de image gzipt kun je ook deze problemen krijgen aangezien de content-length dan minder is.

Wat je dan kunt doen is ob_start(), alles outputten, lengte van de data opvragen (let idd op multibyte, anders gewoon strlen), en dan alles flushen.

IE(7?) had er bij mij ook moeite mee, firefox deed het wel redelijk goed en opera had iets minder kuren dan IE, maar ook brak.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee