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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Tobias Gies
March 07, 2014
Programming
1
150
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
370
Technical Debt - #phpbnl16
tobiasgies
1
260
Technical Debt: Why it's crippling you and what to do
tobiasgies
0
220
Action-Domain-Responder - PHPNW14
tobiasgies
1
710
Dependency Injection - PHPUG Cologne 2013/8
tobiasgies
1
210
Dependency Injection
tobiasgies
1
140
Other Decks in Programming
See All in Programming
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
260
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
1.1k
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
310
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
850
AI Assistants for YourAngular Solutions @Angular Graz, March 2026
manfredsteyer
PRO
0
120
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
1
290
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
190
飯MCP
yusukebe
0
400
Windows on Ryzen and I
seosoft
0
420
Strategy for Finding a Problem for OSS: With Real Examples
kibitan
0
120
実践ハーネスエンジニアリング #MOSHTech
kajitack
7
4.7k
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
150
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
330
How to Ace a Technical Interview
jacobian
281
24k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
180
Building an army of robots
kneath
306
46k
Context Engineering - Making Every Token Count
addyosmani
9
780
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
86
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
120
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
150
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?