[TYPO3-german] Caching von virtuellen URIs beim realURL-Mapping von GET Variablen auf Plugin (Extbase/REST)

Stephan Schuler Stephan.Schuler at netlogix.de
Wed Sep 18 13:39:26 CEST 2013


Hallo Till.


Dein Problem ist, dass Du die Seiten nicht via TypoLink generierst sondern aus dem Frontend heraus.


RealURL verbirgt vor dir, dass es einen cHash-Parameter gibt. Das "c" steht für "cache" und ist genau dafür gedacht.


Für das Caching einer Seite ist die "hashBase" zuständig, die sich (jedenfalls bis 4.7, wie das mit 6.x aussieht kann ich dir mangels Installation gerade nicht nachschlagen; ich vermute aber ähnlich) aus den Paramter "id", "type", "gr_list", "MP", "domainStartPage" und "cHash_array" zusammensetzt.

Die Parameter "id" und "type" sind hoffentlich bekannte GET-Parameter.
Der Parameter "MP" ist "MountPoints", wird aber so gut wie nie verwendet. Hängt mit "id" zusammen.
Der Parameter "gr_list" sind die FE-Benutzergruppen deines FE-Users.
Der Parameter "cHash_array" ist ein Array aller GET-Parameter, die nicht als "nicht in den cHash aufnehme" markiert sind.

Der Parameter "cHash_array" wird grundsätzlich überhaupt nur dann gefüllt, wenn zusätzlich der GET-Parameter "cHash" existiert.

Das heißt, dass das Anhängen von GET-Parametern ohne Angabe des cHash den gleichen Cache-Identifier erzeugt, wie die Seite ohne jegliche GET-Parameter. Deshalb wird die Seite immer "parameterlos" gecacht.

Um auch die GET-Parameter mit in den Cache aufnehmen zu können, muss der cHash-Parameter mit an die URL.

Wenn der cHash-Parameter der an der URL hängt nicht mit dem überein stimmt den TYPO3 intern selbst anhand der hashBase errechnen kann, wird je nach TYPO3-Setup entweder die Seite ungecacht ausgeliefert (frühere Standardeinstellung bis einschließlich 4.7) oder aber die 404-Seite erzeugt (Standardeinstellung seit 6.0, der Config-Parameter heißt "pageNotFoundOnCHashError").

Du kannst den cHash nicht clientseitig erzeugen. Willst du nicht, und darfst du nicht. Das ist sein Sinn: Dass ihn kein Client erraten und damit den Server dosen kann. Gigabyteweise Cacheeinträge nur weil ich als Angreifer beliebige GET-Parameter an die URL hänge.

Bei allen von TYPO3 erzeugten URLs bei denen GET-Parameter (abgesehen von ID und L) existieren, hängt auf alle Fälle der cHash-Parameter an der URL. Die siehst du halt normalerweise nicht, weil RealURL die weg-maskiert und in den RealURL-Cache schreibt anstatt sie zu veröffentlichen. Um genau zu sein steht der cHash nicht an der URL im RealURL-Encode- oder Decode-Cache. Dort stehen nur URLs mit GET-Paramter ohne cHash. Der cHash steht in einem gesonderten cHash-Cache. Und wenn er da nicht steht, errechnet RealURL den cHash selbst anhand der vorhandenen encodierten GET-Variablen sobald eine URL im Encode-Cache gefunden wird. Aber unabhängig vom genauen Verlauf innerhalb von RealURL ist sicher: Wenn RealURL den Encode-Cache nutzt (und nur dann) um eine URL zu encodieren, stellt RealURL auch sicher, dass der cHash korrekt und passend zum aktuellen Request im TSFE registriert wird.

Der einzige wirklich brauchbare Ausweg den ich sehe ist, wenn du Sitemap-Seiten baust, die die von dir gewünschten URLs enthalten. Dann erzeugt RealURL einen URL-Cache-Eintrag. Dadurch ist beim decoding der URL der cHash bekannt. Und dann hast du individuelle Cache-Identifier für URLs mit GET-Parametern.

Sobald du die Erzeugung der URLs durch TypoLink vermeidest, hast du entweder kein Caching oder falsches.


Gruß,
Stephan.


Stephan Schuler
Web-Entwickler

Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de
Website: media.netlogix.de



--
netlogix GmbH & Co. KG
IT-Services | IT-Training | Media
Neuwieder Straße 10 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: info at netlogix.de | Internet: http://www.netlogix.de

netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Stefan Buchta, Matthias Schmidt



-----Ursprüngliche Nachricht-----
Von: typo3-german-bounces at lists.typo3.org [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von g4-lisz at tonarchiv.ch
Gesendet: Mittwoch, 18. September 2013 11:28
An: typo3-german at lists.typo3.org
Betreff: [TYPO3-german] Caching von virtuellen URIs beim realURL-Mapping von GET Variablen auf Plugin (Extbase/REST)

Hallo allerseits,

ich habe versucht, via realURL und Extbase einen REST-Webservice zu kreieren. D.h. meine Extension bedient URLs wie http://api.meinedomain.de/message/ABCDF/2/, die via realURL auf eine Seite mit den entspr. GET-Variablen gemapt werden
(http://api.meinedomain.de/index.pgp?id=15&tx_stdapp_api[identifier]=ABCDF&tx_stdapp_api[type]=2

Diese URIs sind zustandslos, d.h.
http://api.meinedomain.de/message/ABCDF/2/ liefert immer den gleichen Inhalt. Daher bietet es sich an, diesen Inhalt zu cachen.
Aus der Sicht von Typo3 steht hinter allen Anfragen aber  immer die selbe Seite http://api.meinedomain.de/index.pgp?id=15. Daher erhalte ich mit aktiviertem Caching für /message/ABCDF/2/, /message/ABCDF/3/ usw.
immer den gleichen Inhalt.  Wie kann ich T3 dazu überreden, diese URIs als unterschiedliche Seiten zu sehen und den Inhalt zu cachen?

Grüße,
Till
_______________________________________________
TYPO3-german mailing list
TYPO3-german at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german


More information about the TYPO3-german mailing list