2009-07-30 2 views
2

Ich habe Probleme mit einer bestimmten Version von Pocket IE unter Windows Mobile 5.0. Leider bin ich mir der genauen Versionsnummern nicht sicher.Pocket IE: Immer noch scheint Caching?

Wir hatten ein Problem, bei dem diese spezielle 'Installation' eine lokal zwischengespeicherte Version einer Seite zurückgab, wenn das drahtlose Netzwerk ausgeschaltet war. Fair genug, kein Problem. Wir räumten den Cache des Hand und begann die folgenden Header gesendet:

Expires: Mon, 26 Jul 1997 05:00:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Last-Modified: Thu, 30 Jul 2009 16:42:08 GMT 

Der Last-Modified-Header on the fly und auf 'jetzt' berechnet wird.

Auch noch scheint der Handheld diese Seiten zu cachen: Die Seite wird mit den Headern gesendet, aber wenn sie das drahtlose Netzwerk trennen und auf einen Link zur Seite klicken (der nicht zwischengespeichert werden sollte), kehrt sie trotzdem zurück diese zwischengespeicherte Datei.

Gibt es andere Header/s, die gesendet werden sollen, oder ist das nur ein Problem mit Pocket IE? Oder ist es möglicherweise etwas ganz anderes?

Danke!

Antwort

1

Ich bin mir nicht sicher, ob ich deine Frage beantworten kann, da ich keinen Pocket IE zum Testen habe, aber vielleicht kann ich etwas anbieten, das helfen kann.

Dies ist eine sehr gute Caching-Referenz: http://www.mnot.net/cache_docs/

Auch ich ist nicht sicher, ob Ihr Beispiel Ergebnisse der eingefügten ist Ihren Header oder den Code, den Sie eingerichtet haben die Header senden , aber ich glaube, dass die Sammlung von Headern in den meisten Sprachimplementierungen (und ich nehme an, dass es sich bei den meisten Browser-Implementierungen um eine Erweiterung handelt) als eine Map behandelt wird; Daher ist es möglich, dass Sie "no-store, no-cache, muss-revalidate" mit dem zweiten "Cache-Control" -Header überschrieben haben. Mit anderen Worten, nur einer kann gesendet werden, und wenn der letzte gewinnt, haben Sie nur "Nachprüfung = 0, Vorprüfung = 0" gesendet.

Sie können auch versuchen, den Header max-age = 0 hinzuzufügen.

Nach meiner Erfahrung schienen sowohl Firefox als auch IE empfindlicher für Seiten, die von HTTPS bedient wurden. Sie könnten das versuchen, wenn Sie es als eine Option haben.

Wenn Sie immer noch kein Glück haben, und Pocket IE verhält sich deutlich anders als Windows IE, dann meine Vermutung ist, dass der Handheld spezielle Regeln für das Caching hat auf der Annahme, dass es oft weg von Internet-Konnektivität sein wird.

Edit: Nachdem Sie CNN.com erwähnt, und ich erkennen, dass Sie nicht den "privaten" Header in Cache-Control haben. Ich denke, das ist, was CNN.com dazu bringt, die Seite zwischenzuspeichern, aber nicht Ihre. Ich glaube, "privat" ist die strengste Einstellung in der "Cache-Control-Header. Versuchen Sie, dass.

Zum Beispiel, hier sind CNN-Header. (Ich glaube nicht, dass" private "zweimal hat keine Wirkung)

Date: Fri, 31 Jul 2009 16:05:42 GMT 
Server: Apache 
Accept-Ranges: bytes 
Cache-Control: max-age=60, private, private 
Expires: Fri, 31 Jul 2009 16:06:41 GMT 
Content-Type: text/html 
Vary: User-Agent,Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 21221 

200 OK 

Wenn Sie nicht über die Firefox Web Developer Toolbar haben, es ist ein großes Werkzeug Antwort-Header von jeder Website zu überprüfen - in der „Information“ Dropdown-Liste „Ansicht Reponse Headers“ ist am unteren

+0

Danke für die Notizen. Ich wollte nur sagen, dass ich die Header aus meinem PHP-Code kopiert und den PHP-Code "weggezaubert" habe. Daher die falschen Header: Ich habe den Post bearbeitet und in eine exakte Kopie der Header kopiert (zumindest was Firefox betrifft). Ich wollte Sie nur wissen lassen, dass: Ich bin dran, diesen Link zu lesen und versuchen Sie auch die Max-Age-Header, danke. – Narcissus

+0

Falls Pocket IE eine komische Regel implementiert, ist es möglich, dass es, da es das Vorhandensein von "Last-Modified" erkennt, davon ausgeht, dass es die Seite für eine gewisse Zeit zwischenspeichern kann. Sie könnten versuchen, es vollständig zu entfernen und die Möglichkeit auszuschließen, dass Apache 304 Not Modified zurückgeben könnte. Es scheint nach dem folgenden Link, dass Browser gemeint ist, immer einfach den Expires-Header zu befolgen. http://www.askapache.com/htaccess/apache-speed-last-modified.html – Nicole

+1

Weitere Informationen: habe versucht, die Max-Age-Header, sowie die letzte modifizierte Header entfernt. Immer noch keine Würfel. Die nervige Sache ist, dass, wenn sie cnn.com (zum Beispiel) besuchen, der Handheld die Seiten nicht im Cache speichert, so dass mir die Ideen ausgehen :( – Narcissus

0

Obwohl. Renesis war großartig darin, mir hier zu helfen, ich musste aufgeben.

Mit "aufgeben" meine ich, ich habe betrogen. Anstatt zu versuchen, dieses Problem auf der Client-Seite zu lösen, ging ich die serverseitige Route.

Was ich am Ende getan habe, war eine Funktion in PHP zu schreiben, die eine URL nimmt und sie im Wesentlichen einzigartig macht. Dies geschieht, indem ein zufälliger GET-Parameter basierend auf einem Aufruf von uniqid() hinzugefügt wird. Ich mache dann ein paar andere kleine Dinge dazu: Stellen Sie sicher, dass ich ein '?' oder '&' an die URL, die auf dem Vorhandensein anderer GET-Parameter basiert, und stellen Sie sicher, dass alle '#' Ankerelemente bis zum Ende gedrückt werden, und dann gebe ich diese URL an den Browser zurück.

Im Wesentlichen löst dies das Problem, da jeder Link, den der Browser jemals sieht, einzigartig ist: Er hat diese bestimmte URL nie zuvor gesehen und kann sie daher nicht aus dem Cache abrufen.

Hackish? Ja. Arbeiten? So weit, ist es gut.

Verwandte Themen