Es gibt manchmal schon lustige Zufälle: letzte Woche musste ich selbst mit dem Phänomen kämpfen und ein paar Tage später las ich dann das hier in der CakePHP Google-Group: da wunderte sich jemand, warum eine Zeile drei Mal in eine Tabelle eingefügt wird, obwohl er es doch nur einmal im Code aufruft. Die Lösung ist – überraschenderweise – meilenweit entfernt von seinem Code.
Denn im Header-Bereich seiner Seite wurde extra ein Link für ein Favicon definiert, welcher auf favicon.ico zeigt und nicht etwa /favicon.ico. Dieser kleine Unterschied hat eine große Auswirkung, denn der Browser versucht nun, in jedem Unterverzeichnis ein Favicon zu finden.
Und wenn man in CakePHP so schön mit netten URLs arbeitet (das ist keine Kritik an den Nice-URLs!), steht im Browser oft sowas hier: http://mein-cooles-projekt.de/produkte/neu/. Für den Browser ist das ein Verzeichnis und so versucht er, aus /produkte/neu/ das Favicon zu laden. Aufrgrund der Verarbeitung der Routen in CakePHP wird dabei aber erneut die Controller-Action aufgerufen, darin wieder die Seite gerendert, nochmal ein Link auf das Favicon gesetzt, usw.. Warum der Controller nun genau drei Mal aufgerufen wird, kann ich nicht genau sagen. Vielleicht ist dies dann auch nur eine Race-Condition, die eine Endlosschleife verhindert.
Beobachtet habe ich dieses Verhalten übrigens mit dem Firefox und auf die Schliche gekommen bin ich letztendlich mit der wunderbaren Erweiterung Live HTTP Headers.
Gelöst werden kann das Problem auf zwei Arten: entweder man verzichtet gänzlich auf die Favicons und löscht die entsprechende Zeile aus layout/default.html. Oder man fügt ein / vor favicon.ico ein. Dann sucht der Browser nur im Document-Root nach dem Favicon.
5 Responses
Uli
September 18th, 2006 at 7:32
1… eine der wichtigsten Extensions für den Firefox, habe ich auch schon oft verwendet und nur damit den gesuchten Fehler gefunden. Ist übrigens nicht auf https://addons.mozilla.org/firefox/extensions/ sondern nur bei http://livehttpheaders.mozdev.org/ zu finden.
Christian Trummer
September 18th, 2006 at 8:59
2wow das ist wirklich eine verhexte geschichte. das gleiche ist mir passiert wie ich mit ajax code nachladen wollte. bei einem client auf dem norton internet security installiert war wurde durch den popupblocker immer falsches javascript in meinen ajax request eingefügt.. da fragt man sich auch wo der code herkommt :)
dirk.olbertz
September 18th, 2006 at 9:01
3Den von Dir beschriebenen Effekt hat man leider auch, wenn DEBUG auf > 1 steht :-(
henning
März 8th, 2007 at 8:40
4Hab den Tip hier im vorbeisurfen gefunden und wollte mich garnicht mit meinem Favicon auseinandersetzen, aber mit dem / tuts nun wunderbar :)
Danke!
Larry
August 4th, 2008 at 10:12
5Der einzig richtige Weg, ist den Slash vor die URL zu setzen. /favicon.ico
Im Idealfall werden alle URLs von Links, Bildern oder sonstigen Verweisen immer vom Root aus, also mit Slash am Anfang gesetzt. So bleibt man flexibel und muss sich mit der obigen Problematik nie wieder beschäftigen.
RSS feed for comments on this post · TrackBack URI
Leave a reply
Letzte Kommentare
Links
Kategorien
Meta
Cake Bakery is proudly powered by WordPress - BloggingPro theme by: Design Disease