Contao-Camp 2024
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 40 von 62

Thema: Fragen zum privaten Cache (Browsercache)

  1. #1
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard Fragen zum privaten Cache (Browsercache)

    Ich habe heute mal wieder eine 4.8 Installation auf 4.9.2 angehoben. Hat auch soweit funktioniert. Allerdings verstehe ich das Verhalten des Browsers in Bezug auf den Browsercache nicht. Ich habe den shared Cache auf 1 Jahr gestellt, soll ja trotzdem bei Änderungen der Seite automatisch neu generiert werden. Den public private Cache habe ich auf 1 Stunde eingestellt, muss ja nicht immer alles vom Server geladen werden, wenn da einer die Seiten hin- und her klickt. Nach meinem Verständnis sollten jetzt die Seiten beim ersten Zugriff vom Server geladen werden, bei weiteren Zugriff innerhalb einer Stunde sollte die Seite aus dem Browsercache genommen werden. Das funktioniert scheinbar auch. Aber ... warte ich jetzt länger als eine Stunde und greife dann nochmal zu, sollte wieder zuerst vom Server aus dem shared Cache geladen werden. Das funktioniert auch. Allerdings beim nächsten Zugriff auf die Seite lädt er diese wieder aus dem shared Cache anstatt aus dem Browsercache. Sollte er aber doch eigentlich, schliesslich hat der Browser die Seite erst vor wenigen Sekunden vom Server geladen. Jetzt lädt er sie forwährend immer wieder vom Server, das macht aus meiner Sicht keinen Sinn . Es klappt offenbar nur, wenn im Response-Header Age < 3600 ist. Age ist dabei offenbar das "Alter" der Seite im shared Cache.

    Brauche ich da Expires Header wie bei Contao 3 oder wie kann ich das gewünschte Verhalten hinbekommen? Das gewünschte Verhalten wäre, dass immer nach Herunterladen einer Seite vom Server (oder shared Cache) die Seite danach 1 Stunde lang aus dem Browsercache genommen wird. Danach wird wieder einmal vom Server geladen und dann wieder für eine Stunde aus dem Browsercache.
    Geändert von tab (11.05.2020 um 20:46 Uhr)

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Contao sollte die korrekten Header bereits setzen. Es kann aber sein, dass deine Serverkonfiguration (bspw. .htaccess) diese Header noch zusätzlich ändert.

  3. #3
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Oh, ich sehe gerade, dass das wohl noch die .htaccess von 4.8.7 ist. Muss ich auf jeden Fall noch nachziehen. Ist ein Kundenaccount bei Webgo. Zum Thema Headers steht in der momentanen .htaccess aber auch nur drin
    Code:
        <IfModule mod_headers.c>
            # Assets in /assets and /bundles either contain a hash in their filename
            # or are called with a ?version suffix, therefore cache them for 1 year.
            RewriteRule ^(assets|bundles)/ - [ENV=CONTAO_ASSETS:true]
            Header set Cache-Control "max-age=31536000" env=CONTAO_ASSETS
    
            # Allow CORS on the Contao TinyMCE skin.
            RewriteRule ^assets/tinymce4/js/skins/contao/fonts/ - [ENV=CONTAO_TINYM$
            Header set Access-Control-Allow-Origin "*" env=CONTAO_TINYMCE_SKIN
        </IfModule>

  4. #4
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    So, alles nachgezogen, steht bei den Headers in der neuen .htaccess aber auch nichts anderes drin. Sämtliche Caches habe ich jedenfalls geleert, verhält sich bisher genauso wie zuvor, also in der ersten Stunde jedenfalls korrekt. Spannend wird es dann erst wieder in einer Stunde.

  5. #5
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Tja, das mag so gedacht sein, macht aber so keinen Sinn. Da kann ich auch gleich auf den Browsercache verzichten. Nach gut einer Stunde habe ich die Seiten nochmal aufgerufen über die Navigation, also nicht mit reload oder sowas. Was funktioniert hat wie erhofft: Die Seiten wurden aus dem shared Cache geladen. Was nicht so funktioniert hat: Auch nach mehrmaligem hin- und her navigieren wird die Seite nicht mehr aus dem Browsercache geladen, sondern eben immer aus dem shared Cache. Das kann es also wohl nicht sein, Sinn macht es jedenfalls so keinen.

    Edit: Hmm, vielleicht ist es ja auch ein Browserding, muss ich morgen noch mit anderen Browsern außer Firefox probieren.

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Überprüfe die Response Header bspw. mit cURL.

  7. #7
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Also in Google Chrome ist es das selbe Spiel. Dann kann ich ja mit Firefox weitermachen.

    Antwortkopfzeilen (Firefox)
    Code:
    HTTP/1.1 200 OK
    Server: nginx
    Date: Mon, 11 May 2020 07:06:38 GMT
    Content-Type: text/html; charset=utf-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Vary: Accept-Encoding
    contao-merge-cache-control: 1
    Cache-Control: max-age=3600, public, s-maxage=31536000
    vary: Cookie
    x-content-type-options: nosniff
    referrer-policy: no-referrer-when-downgrade, strict-origin-when-cross-origin
    x-frame-options: SAMEORIGIN
    x-xss-protection: 1; mode=block
    x-content-digest: en5c7abc2ba866bbef450eae04841fce1dcad6150d0e67cac3a9568b375e469e98
    Age: 28820
    Contao-Cache: fresh
    Content-Encoding: gzip
    Anfragekopfzeilen (Firefox)
    Code:
    Host: www.example.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Language: de,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    Referer: https://www.example.com/page1.html
    DNT: 1
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    Edit: Kann das mit der speziellen Konfiguration bei Webgo zusammenhängen? Dann probiere ich es bei anderen Hostern.

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Die Header sind korrekt. Die Browser sollten die Seite für 3600 Sekunden nach dem ersten non-cached Request aus dem Browser Cache laden.

  9. #9
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das tun sie auch. Aber nur nach dem ersten Laden, genau eine Stunde lang. Dann wird wieder vom Server aus dem shared Cache geladen. Das führt dann aber nicht dazu, dass die Seite für eine weitere Stunde aus dem Browser Cache geladen wird, sondern es wird nur noch vom Server geladen. Mein Eindruck ist, dass es am Age Header liegt. Wenn das Alter größer ist als 3600, dann sehen die Browser die Seite offenbar als nicht mehr "frisch" an und laden sie dann eben jedes Mal wieder vom Server. Deswegen meine Frage wegen Expires-Header.

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Der Age Header ist nur für Proxies relevant, nicht für den Browser. Ein etwaiger Expires Header wird durch den Cache-Control Header überschrieben. Hier ist das gut erklärt: https://developer.mozilla.org/en-US/.../Cache-Control

    Cache-Control: max-age=3600, public, s-maxage=31536000 bedeutet also:

    • max-age=3600: Private Caches können den Response 3600 Sekunden nach dem initialen Request aus dem eigenen Cache laden.
    • public: Der Response kann von Private & Public Caches gespeichert werden.
    • s-maxage=31536000: Der Response kann von Public Caches für 31536000 Sekunden nach dem ersten Speichern aus dem eigenen Cache geladen werden.

  11. #11
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Habe ich schon Dutzende Male gelesen und versucht, das was ich dort lese mit den praktischen Erfahrungen in Einklang zu bringen. Das gelingt mir offenbar nicht, denn mittlerweile kann ich die heute Nacht erzeugten Seiten nicht mehr aus dem shared Cache laden, so dass der Browser sie in seinem Cache speichert und auch daraus nimmt für darauffolgende Requests. So oft ich es auch lese komme ich zu dem Schluss, dass es eigentlich funktionieren sollte wie gewünscht. Aber das tut es eben nicht. Deswegen machen es entweder alle Browser falsch oder ich verstehe es falsch. Und da gehe ich eben zunächst mal vom Letzteren aus.

    max-age=3600: Private Caches können den Response 3600 Sekunden nach dem initialen Request aus dem eigenen Cache laden.
    Da stellt sich mir z.B. die Frage, was ist der "initiale Request"? Ist der erste Request, nachdem der Browser Cache zu alt ist, wieder ein initialer Request oder sagt der Browser: "Jetzt habe ich die Seite neu runtergeladen, aber nichts Anderes bekommen als ich schon hatte, also lade ich es jetzt solange neu runter, bis sich was ändert (sei es im Inhalt oder in den Response Headern)". Sinnvoll wäre das nicht, jedenfalls verstünde ich den Sinn dahinter nicht. Aber offenbar passiert irgendwas in der Art.

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Gemeint ist einfach der letzte Request and den Server. Wenn der Browser den Inhalt aus dem Private Cache lädt, wird ja kein Request an den Server gesendet. Nach Ablauf von max-age relativ zum letzten Request muss der Browser wieder einen neuen Request an den Server senden.

  13. #13
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das heißt dann, dass es eigentlich funktionieren sollte, was es aber nicht tut. Weder mit Firefox noch mit Google Chrome. Die cachen doch sonst alles was ihnen in die Finger kommt. CSS, JS, Bilder, kein Problem. Klar, ich weiss, dass das von Contao anders gehandlet wird als das dynamisch erzeugte HTML. Ich frage mich halt, warum die trotz der Response Header hier offenbar entweder nicht cachen wollen/können oder den Cache danach nicht mehr als frisch betrachten.

  14. #14
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    6.733
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Du bist aber nicht gleichzeitig im Backend eingeloggt?
    Ich habe Dir mit meinen Hinweisen geholfen und Du möchtest Dich bedanken?
    Unterstütze bitte das Contao-Projekt (Button Links)
    Weitere Spendenmöglichkeiten
    ------------------------------------------------------------------------------------------------------
    Contao-Dokumentation: Contao-Handbuch und Contao-Entwickler-Doku
    Contao-Online-Video-Kurse: Contao Academy
    Funktionalität erweitern: Contao-Erweiterungen

    Für Dinge die man mit html5 und css3 lösen kann, braucht man kein javascript.




  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Wie testest du überhaupt, ob der Browser einen Request sendet oder nicht? Idealerweise benutzt du dafür ein Private Browsing Window und analysierst die Access Logs des Web Servers.

  16. #16
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von mlweb Beitrag anzeigen
    Du bist aber nicht gleichzeitig im Backend eingeloggt?
    Nein, und ich lösche auch grundsätzlich alle Cookies und Caches und mache alle Browserfenster zu, bevor ich den Test starte. Vielleicht habe ich ja irgendwelche verqueren Browser-Einstellungen, Adblock Plus habe ich schon deaktiviert, aber es ist unwahrscheinlich, weil es mit neu erzeugtem Shared Cache eine Stunde lang funktioniert. Ich probiere es aber mal mit dem Notebook, das hat die Seite vorher noch nie geladen.

  17. #17
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    Ich probiere es aber mal mit dem Notebook, das hat die Seite vorher noch nie geladen.
    So, das Notebook lädt die Seiten gleich von Anfang an nicht aus dem Browsercache, sondern grundsätzlich nur aus dem Shared Cache. Wenn ich jetzt den Shared Cache leere, dann wird es wieder funktionieren, aber nur für eine Stunde und dann nie wieder. Ok, vielleicht nach einem Jahr wieder, wenn der Shared Cache erneuert wird.

  18. #18
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hmm, hat mir jemand eine URL zur Hand, wo Shared und Private Cache aktiviert sind, damit ich mir mal anschauen kann, ob das mit meinen Browsern da besser aussieht? Ist ja eine tückische Sache, weil es anfangs funktioniert wie erwartet und man es deshalb nicht unbedingt gleich merkt. Ich dachte anfangs auch alles ist ok . Ist in meinem aktuellen Fall jetzt nicht so dramatisch, die Seite kann auch bequem ohne Browsercache betrieben werden, so groß sind da die Besucherzahlen nicht. Die liegen monatlich eher im niedrigen dreistelligen Bereich.

  19. #19
    Contao-Nutzer
    Registriert seit
    05.12.2009.
    Beiträge
    26

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    Ich habe den shared Cache auf 1 Jahr gestellt, soll ja trotzdem bei Änderungen der Seite automatisch neu generiert werden. Den public Cache habe ich auf 1 Stunde eingestellt, muss ja nicht immer alles vom Server geladen werden, wenn da einer die Seiten hin- und her klickt.
    Könntest du das ggf. noch korrigieren, um die Verwirrung nicht größer als notwendig werden zu lassen

  20. #20
    Contao-Nutzer Avatar von Der Astronaut
    Registriert seit
    20.07.2012.
    Ort
    Weltall
    Beiträge
    241

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    Hmm, hat mir jemand eine URL zur Hand, wo Shared und Private Cache aktiviert sind, damit ich mir mal anschauen kann, ob das mit meinen Browsern da besser aussieht?
    Ich habe auf meiner Seite "derastronaut . de" beide Cache-Varianten aktiviert.

    Shared: 30 Tage
    Private: 60 Minuten

  21. #21
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hmm. Die 30 Tage sehe ich im Response-Header nicht. Ich bekommen die Seiten auch nicht aus dem Cache, weder shared noch private.
    Code:
    HTTP/2 200 OK
    date: Wed, 20 May 2020 09:29:24 GMT
    server: Apache
    contao-merge-cache-control: 1
    cache-control: max-age=3600, private
    vary: Cookie,Accept-Encoding,User-Agent
    x-content-type-options: nosniff
    referrer-policy: no-referrer-when-downgrade, strict-origin-when-cross-origin
    x-frame-options: SAMEORIGIN
    x-xss-protection: 1; mode=block
    contao-cache: miss
    age: 0
    strict-transport-security: max-age=31536000
    cache-control: max-age=0
    expires: Wed, 20 May 2020 09:29:24 GMT
    content-encoding: br
    content-type: text/html; charset=utf-8
    X-Firefox-Spdy: h2

  22. #22
    Contao-Nutzer Avatar von Der Astronaut
    Registriert seit
    20.07.2012.
    Ort
    Weltall
    Beiträge
    241

    Standard

    Das ist mein Ergebnis aus dem Tool vom Firefox. Im Backend war ich nicht eingeloggt. Sieht deinem Ergebnis ziemlich ähnlich. Contao ist mit Version 4.9.3 aktuell.

    Code:
    HTTP/2 200 OK
    date: Wed, 20 May 2020 09:59:29 GMT
    server: Apache
    contao-merge-cache-control: 1
    cache-control: max-age=3600, private
    vary: Cookie,Accept-Encoding,User-Agent
    x-content-type-options: nosniff
    referrer-policy: no-referrer-when-downgrade, strict-origin-when-cross-origin
    x-frame-options: SAMEORIGIN
    x-xss-protection: 1; mode=block
    contao-cache: miss
    age: 0
    strict-transport-security: max-age=31536000
    cache-control: max-age=0
    expires: Wed, 20 May 2020 09:59:29 GMT
    content-encoding: br
    content-type: text/html; charset=utf-8
    X-Firefox-Spdy: h2
    Woran erkennst du denn, ob was aus dem Cache kommt und was nicht? "cache-control: max-age=3600, private" sieht für mich nach den 60 Minuten Private-Cache aus. Weiter unten ist noch "cache-control: max-age=0". Soll das der Server-Cache sein? Sorry, habe nicht wirklich Ahnung von dem Thema, bin aber mit Interesse dabei

    Kann die htaccess vielleicht etwas damit zu tun haben? Habe aus älterer htaccess ein paar Sachen übernommen und vor kurzem auf raten von Google Pagespeed, GTmetrix und Konsorten noch etwas an den "ExpiresByType"-Werten gefeilt. Nicht, dass etwas dazwischen funkt oder eine Fehlkonfiguration irgendwo anders besteht.

    Code:
    ##
    # Configs Server
    ##
      #AddHandler php56-cgi .php
      php_value memory_limit 512M
      php_value max_execution_time 600
      AddDefaultCharset UTF-8
      php_value session.save_path /www/htdocs/w012345/tmp/
    
    ###
    
    <IfModule mod_headers.c>
        # Allow access from all domains for webfonts (see contao/core-bundle#528)
        <FilesMatch "\.(ttf|ttc|otf|eot|woff2?|font\.css)$">
            Header set Access-Control-Allow-Origin "*"
        </FilesMatch>
    </IfModule>
    
    ##
    # Disable ETags
    # @see http://developer.yahoo.com/performance/rules.html#etags
    ##
    FileETag None
    <IfModule mod_headers.c>
      Header unset ETag
    </IfModule>
    
    ##
    # Set the proper MIME types
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_mime.c>
      AddType application/javascript              js jsonp
      AddType application/json                    json
      AddType audio/ogg                           oga ogg
      AddType audio/mp4                           m4a f4a f4b
      AddType video/ogg                           ogv
      AddType video/mp4                           mp4 m4v f4v f4p
      AddType video/webm                          webm
      AddType video/x-flv                         flv
      AddType image/svg+xml                       svg svgz
      AddEncoding gzip                            svgz
      AddType application/vnd.ms-fontobject       eot
      AddType application/x-font-ttf              ttf ttc
      AddType font/opentype                       otf
      AddType application/x-font-woff             woff woff2
      AddType image/x-icon                        ico
      AddType image/webp                          webp
      AddType text/cache-manifest                 appcache manifest
      AddType text/x-component                    htc
      AddType application/xml                     rss atom xml rdf
      AddType application/x-web-app-manifest+json webapp
      AddType text/x-vcard                        vcf
      AddType application/x-shockwave-flash       swf
    </IfModule>
    
    ##
    # Gzip compression
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_deflate.c>
      <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
        AddOutputFilterByType DEFLATE application/javascript
        AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
        AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
        AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
      </IfModule>
    </IfModule>
    
    ##
    # Expires headers (for better cache control)
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_expires.c>
      ExpiresActive on
    
      ##
      # Productional website
      ##
      ExpiresByType text/cache-manifest           "access plus 0 seconds"
      ExpiresByType text/html                     "access plus 0 seconds"
      ExpiresByType text/xml                      "access plus 0 seconds"
      ExpiresByType application/xml               "access plus 0 seconds"
      ExpiresByType application/json              "access plus 0 seconds"
      ExpiresByType application/rss+xml           "access plus 1 hour"
      ExpiresByType application/atom+xml          "access plus 1 hour"
      ExpiresByType image/gif                     "access plus 1 month"
      ExpiresByType image/png                     "access plus 1 month"
      ExpiresByType image/jpg                     "access plus 1 month"
      ExpiresByType image/jpeg                    "access plus 1 month"
      ExpiresByType image/x-icon                  "access plus 1 month"
      ExpiresByType video/ogg                     "access plus 1 month"
      ExpiresByType audio/ogg                     "access plus 1 month"
      ExpiresByType video/mp4                     "access plus 1 month"
      ExpiresByType video/webm                    "access plus 1 month"
      ExpiresByType text/x-component              "access plus 1 month"
      ExpiresByType application/x-font-ttf        "access plus 1 month"
      ExpiresByType font/opentype                 "access plus 1 month"
      ExpiresByType application/x-font-woff       "access plus 1 month"
      ExpiresByType image/svg+xml                 "access plus 1 month"
      ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
      ExpiresByType text/css                      "access plus 1 month"
      ExpiresByType application/javascript        "access plus 1 month"
      #ExpiresByType text/css                      "access plus 1 year"
      #ExpiresByType application/javascript        "access plus 1 year"
    
      ##
      # Disable caching during development
      # @see https://github.com/contao/core/issues/4364
      ##
      #ExpiresByType text/cache-manifest           "access"
      #ExpiresByType text/html                     "access"
      #ExpiresByType text/xml                      "access"
      #ExpiresByType application/xml               "access"
      #ExpiresByType application/json              "access"
      #ExpiresByType application/rss+xml           "access"
      #ExpiresByType application/atom+xml          "access"
      #ExpiresByType image/gif                     "access"
      #ExpiresByType image/png                     "access"
      #ExpiresByType image/jpeg                    "access"
      #ExpiresByType image/x-icon                  "access"
      #ExpiresByType video/ogg                     "access"
      #ExpiresByType audio/ogg                     "access"
      #ExpiresByType video/mp4                     "access"
      #ExpiresByType video/webm                    "access"
      #ExpiresByType text/x-component              "access"
      #ExpiresByType application/x-font-ttf        "access"
      #ExpiresByType font/opentype                 "access"
      #ExpiresByType application/x-font-woff       "access"
      #ExpiresByType image/svg+xml                 "access"
      #ExpiresByType application/vnd.ms-fontobject "access"
      #ExpiresByType text/css                      "access"
      #ExpiresByType application/javascript        "access"
    
    </IfModule>
    
    ##
    # Header adjustments
    ##
    <IfModule mod_headers.c>
    
      ##
      # Disable caching during development
      # @see https://github.com/contao/core/issues/4364
      ##
      #Header unset Cache-Control
      #Header append Cache-Control must-revalidate
    
      ##
      # Do not cache the cron.txt file
      # @see https://github.com/contao/core/issues/5105
      ##
      <FilesMatch "cron\.txt$">
        Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
      </FilesMatch>
    
      ##
      # Add a Vary Accept-Encoding header for the compressed resources. If you
      # modify the file types above, make sure to change them here accordingly.
      # @see http://developer.yahoo.com/performance/rules.html#gzip
      #
      # Note: If you are using a case-sensitive file system like HFS+ or ext4, you
      # have to change the <FilesMatch> directive as follows:
      #
      # <FilesMatch "\.(?i:js|css|xml|gz|svgz)$">
      #
      # For more information see: https://github.com/contao/core/issues/4364
      ##
      <FilesMatch "\.(js|css|xml|gz|svgz)$">
        Header append Vary Accept-Encoding
      </FilesMatch>
    
      ##
      # Do not cache source map files
      # @see https://github.com/contao/core/issues/8532
      ##
      <FilesMatch "\.map$">
        Header set Expires "0"
        Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
      </FilesMatch>
    
    </IfModule>
    
    ##
    # Disable MultiViews if you are having issues with requests returning the wrong
    # page. Requires AllowOverride Options=All,MultiViews to be set here.
    # @see https://github.com/contao/core/issues/3521
    ##
    #Options -MultiViews
    
    <IfModule mod_rewrite.c>
        RewriteEngine On
    
        # Determine the RewriteBase automatically and set it as environment variable.
        # If you are using Apache aliases to do mass virtual hosting or installed the
        # project in a subdirectory, the base path will be prepended to allow proper
        # resolution of the app.php file and to redirect to the correct URI. It will
        # work in environments without path prefix as well, providing a safe, one-size
        # fits all solution. But as you do not need it in this case, you can comment
        # the following 2 lines to eliminate the overhead.
        RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
        RewriteRule ^(.*) - [E=BASE:%1]
    
        # Sets the HTTP_AUTHORIZATION header removed by Apache
        RewriteCond %{HTTP:Authorization} .
        RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
      ##
      # Uncomment the following lines to add "www." to the domain:
      #
      #   RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
      #   RewriteRule (.*) http://www.example.com/$1 [R=301,L]
      #
      # Uncomment the following lines to remove "www." from the domain:
      #
         RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
         RewriteRule (.*) http://example.de/$1 [R=301,L]
      #
      # Make sure to replace "example.com" with your domain name.
      ##
    
      ##
      # If you cannot use mod_deflate, uncomment the following lines to load a
      # compressed .gz version of the aggregated Contao JavaScript and CSS files.
      ##
      #AddEncoding gzip .gz
      #<FilesMatch "\.js\.gz$">
      #  AddType "application/javascript" .gz
      #</FilesMatch>
      #<FilesMatch "\.css\.gz$">
      #  AddType "text/css" .gz
      #</FilesMatch>
      #RewriteCond %{HTTP:Accept-encoding} gzip
      #RewriteCond %{REQUEST_FILENAME} \.(js|css)$
      #RewriteCond %{REQUEST_FILENAME}.gz -f
      #RewriteRule ^(.*)$ $1.gz [QSA,L]
    
        # Redirect to URI without front controller to prevent duplicate content
        # (with and without `/app.php`). Only do this redirect on the initial
        # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
        # endless redirect loop (request -> rewrite to front controller ->
        # redirect -> request -> ...).
        # So in case you get a "too many redirects" error or you always get redirected
        # to the start page because your Apache does not expose the REDIRECT_STATUS
        # environment variable, you have 2 choices:
        # - disable this feature by commenting the following 2 lines or
        # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
        #   following RewriteCond (best solution)
        RewriteCond %{ENV:REDIRECT_STATUS} ^$
        RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
    
        # If the requested filename exists, simply serve it.
        # We only want to let Apache serve files and not directories.
        RewriteCond %{REQUEST_FILENAME} -f
        RewriteRule ^ - [L]
    
        # Rewrite all other queries to the front controller.
        RewriteRule ^ %{ENV:BASE}/app.php [L]
    
    </IfModule>
    
    <IfModule !mod_rewrite.c>
        <IfModule mod_alias.c>
            # When mod_rewrite is not available, we instruct a temporary redirect of
            # the start page to the front controller explicitly so that the website
            # and the generated links can still be used.
            RedirectMatch 302 ^/$ /app.php/
            # RedirectTemp cannot be used instead
        </IfModule>
    </IfModule>

  23. #23
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das mit den Expires-Headern frage ich mich ja auch. Scheint letztlich (leider!) der einzige Weg zu sein, den private Cache sinnvoll zu nutzen, passt aber wohl mit Contao nicht mehr zusammen. Laut @Spooky und der von ihm verlinkten Dokumentation wird der Expires-Header vom Cache-Control Header überschrieben. Wobei alles was ich bisher zum Thema gefunden habe aussagt, dass es bei mir mit den zurückgeschickten Response-Headern eigentlich funktionieren sollte wie gewünscht. Tut es aber halt nicht. Und das ist unschön, weil ich der Meinung bin, dass der beste Request der ist, der gar nicht erst beim Server aufschlägt und somit auch keine Last erzeugt.

  24. #24
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wie testest du überhaupt, ob der Browser einen Request sendet oder nicht? Idealerweise benutzt du dafür ein Private Browsing Window und analysierst die Access Logs des Web Servers.
    Das hatte ich bisher überlesen. Werde ich aber mal machen. Bisher habe ich das ganz einfach getestet. Wenn mir Firefox in der Netzwerkanalyse (Spalte "Übertragen") sagt, dass das HTML "Aus Cache" kommt, gehe ich davon aus, dass er es aus dem Browser-Cache nimmt. Das steht da auch so in der ersten Stunde nach Neuaufbau des shared Cache. Steht dagegen z.B. in dieser Spalte "7,11 KB", dann gehe ich davon aus, dass 7,11 KB vom Server geladen wurden und nicht aus dem Browser-Cache. Das sollte ohne gesendeten Request dann auch nicht möglich sein. Ich schaue aber im Lauf des Tages mal in die Logs, ob da wirklich ein Request kommt.

  25. #25
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Also der Request kommt und wird erfolgreich bearbeitet (Status 200). Jedenfalls dann, wenn da nicht "Aus Cache" steht.

  26. #26
    Contao-Nutzer
    Registriert seit
    05.12.2009.
    Beiträge
    26

    Standard

    Zitat Zitat von Der Astronaut Beitrag anzeigen
    Woran erkennst du denn, ob was aus dem Cache kommt und was nicht?
    Ob die Seite aus dem Shared-Cache stammt, ist insbesondere am "contao-cache" Header erkennbar.

    "miss" bedeutet, dass die Seite nicht aus dem Shared-Cache stammt und nach dem Seitenaufruf auch nicht im Shared-Cache gespeichert wurde.

    Grund hierfür kann sein, dass der Shared-Cache für die Seite nicht aktiviert ist oder bei dem Seitenaufruf Anhaltspunkte für eine Nutzerauthentifizierung vorliegen (siehe https://github.com/contao/contao/blo...er.php#L35-L41).

  27. #27
    Contao-Nutzer Avatar von Der Astronaut
    Registriert seit
    20.07.2012.
    Ort
    Weltall
    Beiträge
    241

    Standard

    Hmm, der Shared-Cache ist aber (im Startpunkt) aktiviert:

    2020-05-21_contao-cache.png

    Auch hatte ich ein paar Dienste im Netz benutzt, damit ich als Fehlerquelle ausscheide, falls ich die Funktion im Firefox falsch bedienen sollte. Überall die gleichen Ergebnisse.

  28. #28
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    @Der Astronaut: welche Contao Version?

  29. #29
    Contao-Nutzer Avatar von Der Astronaut
    Registriert seit
    20.07.2012.
    Ort
    Weltall
    Beiträge
    241

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    @Der Astronaut: welche Contao Version?
    4.9.3

  30. #30
    Contao-Nutzer
    Registriert seit
    05.12.2009.
    Beiträge
    26

    Standard

    Zitat Zitat von Der Astronaut Beitrag anzeigen
    Hmm, der Shared-Cache ist aber (im Startpunkt) aktiviert
    Und wie sehen die Cache-Einstellungen der Seite selbst aus?

    Ist dort evtl. "Cachezeiten festlegen" aktiviert, sodass die Cache-Einstellungen des Startpunkts überschrieben werden, aber keine Cachezeit für den Shared-Cache festgelegt?

  31. #31
    Contao-Nutzer Avatar von Der Astronaut
    Registriert seit
    20.07.2012.
    Ort
    Weltall
    Beiträge
    241

    Standard

    Zitat Zitat von Mynyx Beitrag anzeigen
    Und wie sehen die Cache-Einstellungen der Seite selbst aus?

    Ist dort evtl. "Cachezeiten festlegen" aktiviert, sodass die Cache-Einstellungen des Startpunkts überschrieben werden, aber keine Cachezeit für den Shared-Cache festgelegt?
    Nein, ist nicht aktiviert, so dass die Einstellungen aus dem Startpunkt vererbt werden. Ich hatte das eben aber auch schon mit einem eigenen Wert einer Unterseite versucht. Kommt trotzdem "miss" als Ergebnis raus.

  32. #32
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Zitat Zitat von Der Astronaut Beitrag anzeigen
    4.9.3
    Es liegt an deinen Server Einstellungen. Siehe der Response vom Server:
    Code:
    $ curl -I https://derastronaut.de/
    HTTP/2 200
    date: Thu, 21 May 2020 11:31:41 GMT
    server: Apache
    contao-merge-cache-control: 1
    cache-control: max-age=3600, private
    vary: Cookie,Accept-Encoding,User-Agent
    x-content-type-options: nosniff
    referrer-policy: no-referrer-when-downgrade, strict-origin-when-cross-origin
    x-frame-options: SAMEORIGIN
    x-xss-protection: 1; mode=block
    contao-cache: miss
    age: 0
    strict-transport-security: max-age=31536000
    content-length: 35257
    cache-control: max-age=0
    expires: Thu, 21 May 2020 11:31:41 GMT
    content-type: text/html; charset=utf-8
    Dein Server Antwortet mit
    Code:
    vary: Cookie,Accept-Encoding,User-Agent
    Contao würde aber nur mit
    Code:
    var: Cookie
    antworten. Außerdem ist der cache-control Header doppelt, vermutlich kommt einer von Contao und der andere von anderswo in der Pipeline des Servers. Und es wird auch noch ein expires Header gesetzt, den Contao eigentlich nicht setzen würde.

  33. #33
    Contao-Nutzer Avatar von Der Astronaut
    Registriert seit
    20.07.2012.
    Ort
    Weltall
    Beiträge
    241

    Standard

    Könnte das etwas mit der htaccess zu tun haben?

  34. #34
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Zitat Zitat von Der Astronaut Beitrag anzeigen
    Könnte das etwas mit der htaccess zu tun haben?
    Ja, du hast dort jegliches Caching für HTML Seiten deaktiviert:
    Code:
    ExpiresByType text/html                     "access plus 0 seconds"
    Generell hat deine .htaccess teilweise veraltete Anweisungen drin. Ich würde empfehlen deine aktuelle .htaccess zu löschen, composer install ausführen und dann gezielt Dinge in in die .htaccess einfügen (bspw. Caching Anweisungen für alles andere außer text/html).

  35. #35
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, mach das mal, ich bin gespannt ob deine Seite von meinen Browsern dann ebenso behandelt wird wie meine .

  36. #36
    Contao-Nutzer Avatar von Der Astronaut
    Registriert seit
    20.07.2012.
    Ort
    Weltall
    Beiträge
    241

    Standard

    Wenn ihr mir noch bitte sagt, wie ich composer install ausführe und welche Sachen ich aus der htaccess übernehmen kann, dann mache ich das gerne

  37. #37
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Auf deiner Seite wird übrigens folgendes Cookie gesetzt: cookieconsent_status (wenn man akzeptiert).
    Ohne weitere Anpassungen wird dieses Cookie verursachen, dass die Seiten nicht aus dem Shared Cache geladen werden.

  38. #38
    Contao-Nutzer Avatar von Der Astronaut
    Registriert seit
    20.07.2012.
    Ort
    Weltall
    Beiträge
    241

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Auf deiner Seite wird übrigens folgendes Cookie gesetzt: cookieconsent_status (wenn man akzeptiert).
    Ohne weitere Anpassungen wird dieses Cookie verursachen, dass die Seiten nicht aus dem Shared Cache geladen werden.
    Meinst du das hier?

    Code:
    COOKIE_WHITELIST=PHPSESSID,csrf_https-contao_csrf_token

  39. #39
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Ja, wenn du die COOKIE_WHITELIST bereits gesetzt hast, dann passt es .

  40. #40
    Contao-Nutzer Avatar von Der Astronaut
    Registriert seit
    20.07.2012.
    Ort
    Weltall
    Beiträge
    241

    Standard

    Es scheint dennoch nicht zu funktionieren. Ich habe eine .env-Datei in das root-Verzeichnis meiner Contao-Installation mit folgendem Inhalt erstellt:

    Code:
    COOKIE_WHITELIST=PHPSESSID,csrf_https-contao_csrf_token,cookieconsent_status
    Dennoch wird beim Check (curl -I URL) weiterhin "contao-cache: miss" angezeigt.

    Auch im Ordner http_cache werden nur komische Unterordner angelegt ohne jeglichen Inhalt.

    Außerdem müsste der Shared-Cache doch arbeiten, wenn ich das JS vom Cookie-Consent rausnehme, das Cookie somit gar nicht mehr gesetzt werden kann und dann im Browser checke. Das habe ich zu Testzwecken (auch in anderen Browsern) versucht, aber auch hier immer noch "contao-cache: miss".


    P.S.: Interessant ist auch, dass man das trusted_device-Cookie in die .env-Datei packen muss, sonst vertraut Contao einem beim Login ins Backend nicht mehr, wenn man 2FA aktiviert hat

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •