Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HTTP + Caching - PHPUG Cologne 2014/03
Search
Tobias Gies
March 07, 2014
Programming
1
130
HTTP + Caching - PHPUG Cologne 2014/03
A talk about HTTP headers and how they influence cache behavior.
Tobias Gies
March 07, 2014
Tweet
Share
More Decks by Tobias Gies
See All by Tobias Gies
Intro to Apache Kafka #phpbnl20
tobiasgies
1
240
Technical Debt - #phpbnl16
tobiasgies
1
180
Technical Debt: Why it's crippling you and what to do
tobiasgies
0
170
Action-Domain-Responder - PHPNW14
tobiasgies
1
510
Dependency Injection - PHPUG Cologne 2013/8
tobiasgies
1
160
Dependency Injection
tobiasgies
1
130
Other Decks in Programming
See All in Programming
1BRC--Nerd Sniping the Java Community
gunnarmorling
0
340
Rethinking UI building strategies @ SFI 2024
letelete
0
270
What We Can Learn From OSS
inouehi
0
420
コードレビューで学ぶ!Kotlinオブジェクト指向デザインパターン
akkie76
2
200
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
940
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
670
VSCodeでのDatabricks開発もお勧めしたい/I would also recommend Databricks development with VSCode.
kazumain
0
250
"config" ってなんだ? / What is "config"?
okashoi
0
240
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
110
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
480
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
26
8.2k
Goのエラースタックトレースの歴史と今後
sonatard
7
1.1k
Featured
See All Featured
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
659
120k
Making Projects Easy
brettharned
108
5.5k
Fireside Chat
paigeccino
21
2.6k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
How GitHub (no longer) Works
holman
304
140k
How to Ace a Technical Interview
jacobian
272
22k
Embracing the Ebb and Flow
colly
80
4.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
30
6k
Ruby is Unlike a Banana
tanoku
96
10k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
The MySQL Ecosystem @ GitHub 2015
samlambert
243
12k
Transcript
HTTP
HyperText Transfer Protocol
HTTP request GET /index.1.de.html HTTP/1.1 Host: www.example.com
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
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
HTTP-Methoden • GET • POST • PUT • DELETE •
HEAD
HTTP status codes
Exkurs: Caches
Cache-Arten • Browser-Cache • Proxy Cache • Gateway Cache /
Reverse Proxy – Self-hosted (Varnish, …) – Kommerziell / CDN (Cloudflare, Akamai & co.)
Cache-relevante HTTP-Header • Expires • Cache-Control • ETag • Last-Modified
• If-Modified-Since • If-None-Match • Vary • Age • Set-Cookie
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
Cache-Control Cache-Control: no-cache, must-revalidate • HTTP/1.1 • Wesentlich feinere Kontrolle
über den Cache • Optionen: – max-age – s-maxage – public – private
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
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
Last-Modified Last-Modified: Thu, 20 Feb 2014 14:42:03 GMT • Letztes
Änderungsdatum der Ressource
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
If-None-Match If-None-Match: "some-random-value" • Request-Header • Abfrage, ob Version mit
diesem ETag vorhanden • Wenn ja: Status 304
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
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
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.
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.
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
Noch Fragen?