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
310
Technical Debt - #phpbnl16
tobiasgies
1
230
Technical Debt: Why it's crippling you and what to do
tobiasgies
0
190
Action-Domain-Responder - PHPNW14
tobiasgies
1
620
Dependency Injection - PHPUG Cologne 2013/8
tobiasgies
1
190
Dependency Injection
tobiasgies
1
140
Other Decks in Programming
See All in Programming
小田原でみんなで一句詠みたいな #phpcon_odawara
stefafafan
0
320
Rollupのビルド時間高速化によるプレビュー表示速度改善とバンドラとASTを駆使したプロダクト開発の難しさ
plaidtech
PRO
1
170
The Evolution of the CRuby Build System
kateinoigakukun
0
110
Unlock the Potential of Swift Code Generation
rockname
0
240
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
240
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
360
AHC045_解説
shun_pi
0
500
Java 24まとめ / Java 24 summary
kishida
3
490
MCP調べてみました! / Exploring MCP
uhzz
2
2.2k
Devin入門と最近のアップデートから見るDevinの進化 / Introduction to Devin and the Evolution of Devin as Seen in Recent Update
rkaga
9
4.8k
SQL Server ベクトル検索
odashinsuke
0
170
「”誤った使い方をすることが困難”な設計」で良いコードの基礎を固めよう / phpcon-odawara-2025
taniguhey
0
120
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
178
53k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
4 Signs Your Business is Dying
shpigford
183
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
The Pragmatic Product Professional
lauravandoore
33
6.5k
Gamification - CAS2011
davidbonilla
81
5.2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
660
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Embracing the Ebb and Flow
colly
85
4.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
A designer walks into a library…
pauljervisheath
205
24k
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?