Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HTTP + Caching - PHPUG Cologne 2014/03

HTTP + Caching - PHPUG Cologne 2014/03

A talk about HTTP headers and how they influence cache behavior.

Tobias Gies

March 07, 2014
Tweet

More Decks by Tobias Gies

Other Decks in Programming

Transcript

  1. HTTP

    View Slide

  2. HyperText Transfer Protocol

    View Slide

  3. HTTP request
    GET /index.1.de.html HTTP/1.1
    Host: www.example.com

    View Slide

  4. HTTP request
    GET / HTTP/1.1
    Host: www.example.com
    Connection: keep-alive
    Cache-Control: no-cache
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Pragma: no-cache
    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)
    Chrome/32.0.1700.107 Safari/537.36
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
    Cookie: sid=t73fuqi322d115fdr8tt1fsf30

    View Slide

  5. HTTP response
    HTTP/1.1 200 OK
    Date: Thu, 20 Feb 2014 14:42:03 GMT
    Server: Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.9 mod_ssl/2.2.22 OpenSSL/1.0.1
    X-Powered-By: PHP/5.3.10-1ubuntu3.9
    P3P: CP="NOI NID ADMa OUR IND UNI COM NAV"
    Set-Cookie: sid=t73fuqi322d115fdr8tt1fsf30; path=/; HttpOnly
    Expires: Sun, 22 Dec 2013 14:42:03 GMT
    Cache-Control: no-store, no-cache, must-revalidate, no-transform
    Last-Modified: Thu, 20 Feb 2014 14:42:03 GMT
    X-Generator: papaya CMS
    X-Papaya-Cache: no
    Content-Encoding: gzip
    X-Papaya-Gzip: yes
    Content-Length: 6315
    Keep-Alive: timeout=5, max=95
    Connection: Keep-Alive
    Content-Type: text/html; charset=utf-8

    View Slide

  6. HTTP-Methoden

    GET

    POST

    PUT

    DELETE

    HEAD

    View Slide

  7. HTTP status codes

    View Slide

  8. Exkurs: Caches

    View Slide

  9. Cache-Arten

    Browser-Cache

    Proxy Cache

    Gateway Cache / Reverse Proxy
    – Self-hosted (Varnish, …)
    – Kommerziell / CDN (Cloudflare, Akamai & co.)

    View Slide

  10. Cache-relevante HTTP-Header

    Expires

    Cache-Control

    ETag

    Last-Modified

    If-Modified-Since

    If-None-Match

    Vary

    Age

    Set-Cookie

    View Slide

  11. Expires
    Expires: Sun, 22 Dec 2013 14:42:03 GMT

    HTTP/1.0

    Ablaufdatum des Inhalts (Zeitzone GMT!)

    Nützlich für Caching statischer Ressourcen

    View Slide

  12. Cache-Control
    Cache-Control: no-cache, must-revalidate

    HTTP/1.1

    Wesentlich feinere Kontrolle über den Cache

    Optionen:
    – max-age
    – s-maxage
    – public
    – private

    View Slide

  13. Cache-Control
    Cache-Control: no-cache, must-revalidate

    HTTP/1.1

    Wesentlich feinere Kontrolle über den Cache

    Optionen (2):
    – no-cache
    – no-store
    – must-revalidate
    – proxy-revalidate

    View Slide

  14. ETag
    ETag: [W/]"some-random-value"

    HTTP/1.1

    Identifiziert eine Version einer Ressource
    eindeutig

    Starker ETag: Garantiert identische Ressource

    Schwacher ETag (W/): Garantiert äquivalente
    Ressource

    Bei statischen Ressourcen abschalten

    View Slide

  15. Last-Modified
    Last-Modified: Thu, 20 Feb 2014 14:42:03 GMT

    Letztes Änderungsdatum der Ressource

    View Slide

  16. If-Modified-Since
    If-Modified-Since: Wed, 01 Sep 2004 13:24:52 GMT

    Request-Header

    Nur ausliefern, wenn neuere Version
    vorhanden

    Sonst Status 304

    View Slide

  17. If-None-Match
    If-None-Match: "some-random-value"

    Request-Header

    Abfrage, ob Version mit diesem ETag
    vorhanden

    Wenn ja: Status 304

    View Slide

  18. Vary
    Vary: Cookie,Accept,Accept-Encoding

    Information an Caches: Antwort unterscheidet
    sich je nach Wert der angegebenen Request-
    Header!

    Bspw. wichtig im Umgang mit schlecht
    konfigurierten Corporate Proxies

    View Slide

  19. Age
    Age: 30

    Gibt das Alter der Ressource in Sekunden an

    Caches rechnen:
    request timestamp – now – Age + max-age > 0?

    Wird auch von Caches selbst angegeben

    View Slide

  20. Set-Cookie
    Set-Cookie: name=somevalue; Secure

    Inhalt, der Cookies enthält, ist uncached!

    Aber: Cookies sind nützlich, um mehrere
    Versionen einer Ressource im Reverse-Proxy
    zu cachen.

    View Slide

  21. POST

    POST bedeutet: Es wird eine Ressource
    verändert.

    Antworten auf POST-Requests werden nicht
    gecached.

    POST also nur da verwenden, wo es nötig ist.

    View Slide

  22. Ressourcen

    Wikipedia: „Liste der HTTP-Headerfelder“

    Caching Tutorial for web authors and webmasters:
    http://www.mnot.net/cache_docs/

    HTTP – The Varnish Cookbook:
    https://www.varnish-software.com/static/book/HTTP.html

    YSlow: Best practices for speeding up your website:
    http://developer.yahoo.com/performance/rules.html

    View Slide

  23. Noch Fragen?

    View Slide