[http] image caching haalt chrome onderuit

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
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:
  • 0 Henk '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:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
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:
  • 0 Henk '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:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
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:
  • 0 Henk '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:
  • 0 Henk '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:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
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:
  • 0 Henk '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:
  • 0 Henk '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

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 11-09 22:10

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