Optimisation du transport de contenu 1

Download Report

Transcript Optimisation du transport de contenu 1

Plan
Optimisation du transport de contenu
1 - HTTP : proxys et caches
Christophe Deleuze
1
Bases de HTTP
2
Intermédiaires HTTP
3
Gestion des proxys par HTTP
4
Proxys transparents
Grenoble INP ESISAR
Décembre 2014
1 / 45
2 / 45
Vue de très haut niveau
Versions de HTTP
•
1 client ouvre connexion et envoie GET doc.html
2 serveur écrit le chier dans la connexion
3 la connexion est fermée
http:
//www.example.com/coucou.html
j'entre une URL
1 le nom est résolu en adresse IP
•
2 une connexion TCP (tuyau) est
données)
R
ouverte
⇒ GET / HTTP/1.0
User-Agent: Wget/1.11.4
Accept: */*
Host: www.acrimed.org
1
W
2
3 la requête est envoyée, le serveur
répond (en général, gd nb de
1.0 rfc 1945 (informational)
• format structuré pour les requêtes et les réponses (méta
(DNS)
1 → TCP SYN
2 ← TCP SYN+ACK
3 → TCP ACK
0.9
C
⇐ HTTP/1.0 200 OK
Date: Thu, 08 Apr 2010 13:11:50 GMT
Content-Length: 8342
[...]
3
requêtes et réponses)
4 ... la connexion TCP est fermée
[le document]
• possibilité connexion persistante (Keep-Alive:)
3 / 45
4 / 45
Connexions persistantes
Connexions non persistantes
Connexion persistante
SYN
SYN
SYN-ACK
SYN-ACK
ACK
ACK
requête
1
requête
1
réponse
1
HTTP/1.1 rfc 2616 72307235
réponse
⇒ GET / HTTP/1.1
Host: z80.info
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/20
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
1
FIN
FIN-ACK
ACK
⇐ HTTP/1.1 200 OK
Date: Fri, 09 Apr 2010 07:50:23 GMT
Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPag
Last-Modified: Sun, 07 Feb 2010 11:25:56 GMT
ETag: "35d02c7-490e-4b6ea344"
Content-Length: 18702
Connection: close
Content-Type: text/html
requête
2
SYN
réponse
SYN-ACK
2
ACK
requête
2
réponse
2
FIN
FIN-ACK
<HTML><HEAD> [...]
ACK
6 / 45
5 / 45
Catégories de méthodes (rfc7231)
Pipelining
C
Safe methods
S
GET im1.pn
g
Request methods are considered "safe" if their dened semantics
are essentially read-only; i.e., the client does not request, and does
not expect, any state change on the origin server as a result of
•
applying a safe method to a target resource.
par défaut, une seule
transaction à la fois sur une
[...]
connexion
Of the request methods dened by this specication, the GET,
• long si beaucoup d'objets
HEAD, OPTIONS, and TRACE methods are dened to be safe.
inclus
•
Idempotent Methods
une solution : connexions
parallèles
A request method is considered "idempotent" if the intended eect
• problèmes d'équité
on the server of multiple identical requests with that method is the
same as the eect for a single such request. Of the request
g
200 img1.pn
GET img2.p
ng
g
200 img2.pn
GET img3.p
ng
g
200 img3.pn
methods dened by this specication, PUT, DELETE, and safe
request methods are idempotent
7 / 45
8 / 45
Pipelining
C
•
envoi des requêtes sans
•
oui mais :
• serveur ne gère pas
forcément
• méthodes idempotentes
uniquement
• impossible réordonner les
réponses
•
S
GET img1.p
ng
C
GET sql_qu
ery.php
S
GET img1.p
ng
GET img2.p
ng
g
200 img1.pn
GET img3.p
ng
g
200 img2.pn
rfc7230-6.3.2+4
SQL query
attente réponse
Head of line blocking
GET img2.p
ng
sult
200 query_re
g
200 img3.pn
sequence of pipelined requests
in
parallel
if
they
all have safe methods, but
it MUST send the corresponding responses in the
g
200 img1.pn
head of line blocking
A server MAY process a
same
order
that
the
re-
quests were received.
g
200 img2.pn
10 / 45
9 / 45
HTTP/2
Proxy dénition générale
élément intermédiaire dans une communication client-serveur
En phase de nalisation :
http://datatracker.ietf.org/wg/httpbis/charter/
•
•
base de départ spdy (protocole google)
•
compression des en-têtes
•
multiplexage
passerelle
• protocoles (gateway)
• réseau public/privé
• paramètres réseau
•
ltrage
•
transformation de contenu
•
cache
améliorations attendues :
•
réduction de la latence
•
résolution du problème head of line blocking
•
amélioration de l'usage de TCP (pas de connexions parallèles
requête
requête
SC
C
réponse
nécessaires)
client
11 / 45
S
réponse
proxy
serveur
12 / 45
Cache web
•
Intermédiaires HTTP
proxy garde réponses en cache
O
1
C
3
P
S
•
2
• proxy
• gateway (reverse proxy)
• tunnel
•
•
intermédiaires
P
extrémités
• le serveur est l'origine
• le client est le user agent
gestion du cache
• Least Recently Used (LRU)
• Least Frequently Used (LFU)
• LRU + taille
• taille
• ...
U
14 / 45
13 / 45
Forward Proxy Caching
Proxy d'entreprise
O
•
un
proxy
O
•
sert le contenu au
•
géré par le FAI
sert le contenu au
géré par l'entreprise
• + moins de transferts
• +++ moins de transferts
• ++ moins de délai
• +++ applique politique de
P
• + moins de délai
• + soulage l'origine
• l'origine perd le contrôle
ltrage (ex interdit
facebook/youtube)
(stats, fracheur)
•
proxy
client
client
•
un
• + soulage l'origine
• l'origine perd le contrôle
explicite/forcé/transparent
(stats, fracheur)
U
U
U
15 / 45
P
U
16 / 45
Reverse proxy
•
agit comme un serveur origine
•
traduit/relaie les requêtes pour
Tunnel HTTP
O
P
•
relaie les messages entre deux connexions
•
n'intervient aucunement dans la communication
•
un proxy devient un tunnel (pour une communication) par la
méthode CONNECT
le serveur
•
⇒ CONNECT startpage.com:443 HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140924 conkero
Proxy-Connection: keep-alive
Connection: keep-alive
Host: startpage.com
géré par le fournisseur de
contenu
• performance (accelérateur
web)
• interface services legacy
(non HTTP)
⇐ HTTP/1.0 200 Connection established
plusieurs serveurs
⇒ ..............._...&..j..'...v<U,......../n..F.
• partitionne/équilibre entre
U
←
négocia-
tion TLS
U
17 / 45
18 / 45
Support des proxys
•
format des requêtes :
• vers un serveur :
cible
Gestion des caches
de la méthode
origin-form
= chemin absolu
⇒ GET /path HTTP/1.1
Host: www.example.com
• vers un proxy :
absolute-form
= URI absolue
champ
⇐ Via: 1.1 varnish, 1.0 localhost (squid/3.1.19)
TRACE et
Warning
méthode
•
champ
champ
•
quels éléments des réponses ?
•
comment économiser en assurant la
cohérence ?
• expiration
• validation
• cache control
Via
•
quelles réponses cacher ?
(transparence sémantique)
⇒ GET http://www.example.com/path HTTP/1.1
Host: www.example.com
•
•
le navigateur typique a un cache local (non partagé)
Max-Forward
19 / 45
20 / 45
Que peut-on cacher ?
Parties non cachables
les règles sont complexes, en gros ok si :
•
•
la méthode de la requête est connue et spéciée comme
cachable par défaut (GET, HEAD, POST)
hop-by-hop headers
et le code de réponse est connu et... (200, 203, 204, 206, 300,
transport, ne sont ni cachés ni relayés par les proxys.
301, 404, 405, 410, 414, 501)
•
⇒ GET /Private/ HTTP/1.1
Authorization: Basic cGhvdG9zOmbsb3BnbG9w
[...]
⇐ HTTP/1.1 200 OK
Date: Fri, 09 Apr 2010 09:28:26 GMT
Server: Apache/ProXad [Aug 9 2008 02:45:09]
[...]
et aucune indication explicite ne l'interdit (on y reviendra)
•
une indication explicite l'autorise
une
connexion de
Connection
Keep-Alive
Proxy-Authenticate
Proxy-Authorization
Upgrade
...
et pas de données d'authentication dans la requête
•
: n'ont de sens que sur
plus ceux listés dans
Connection
ou
21 / 45
22 / 45
Expiration
•
date spéciée par l'origine :
•
heuristique adaptive TTL
Calcul de l'âge
Expires
• ex. Cisco Content Engine
Une réponse servie depuis le cache doit contenir un champ
TTL = (CurrentDate LastModTime) × FreshnessFactor
(doc décourage FF > 10 %)
•
Age:
nb de secondes depuis génération (ou revalidation) par l'origine
(temps passé en cache et en transit)
• expiration si age > TTL
• origine fournit Date
• proxy fournit Age
• Warning: 113 Heuristic expiration
si TTL
>
24 h et age
>
24 h
23 / 45
24 / 45
Calcul de l'âge
Validation
proxy doit déterminer l'âge de la réponse qu'il reçoit : deux
méthodes
O/P
P
GET
1 utiliser la date de création de la
réponse
P
2 âge = t
•
req. cond. avec validateur
•
validateurs
• Last-Modified (If-Modified-Since) HTTP/1.0
• ETag à validateur opaque
P1
P2
GET
GET
200 OK
Age: x
200 OK
t
x
t
ou âge = t +
O
origine associe un validateur à la réponse
• si OK à 304 Not Modified
Date: d
200 OK
âge = max(0, now - d)
•
•
validateurs faibles et forts
• faible : reste valide si chgt not semantically signicant
• GET subrange/204 Partial Content interdit
• fort : invalide pour tout chgt
• browser
reload/shift-reload
26 / 45
25 / 45
Validation : je clique reload
Première requête tout à l'heure...
⇒ GET / HTTP/1.1
⇒ GET / HTTP/1.1
Host: z80.info
Host: z80.info
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/2009072220 Iceweasel/3.0.6 (Debian-3.0.6-1)
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q
Accept-Language: en-us,en;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Keep-Alive: 300
Connection: keep-alive
Connection: keep-alive
If-Modified-Since: Sun, 07 Feb 2010 11:25:56 GMT
If-None-Match: "35d02c7-490e-4b6ea344"
⇐ HTTP/1.1 200 OK
Cache-Control: max-age=0
Date: Fri, 09 Apr 2010 07:50:23 GMT
Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3
⇐ HTTP/1.1 304 Not Modified
Last-Modified: Sun, 07 Feb 2010 11:25:56 GMT
Date: Fri, 09 Apr 2010 07:51:01 GMT
ETag: "35d02c7-490e-4b6ea344"
Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPage/5.0.2.2635
Content-Length: 18702
Connection: close
[...]
ETag: "35d02c7-490e-4b6ea344"
27 / 45
28 / 45
Cachabilité
HTTP/1.0
HTTP/1.1
Exemples de warning
Pragma: no-cache
Cache-Control: XXXX
Expires
max−age
âge
0
min−fresh
110 - "Response is Stale"
max−stale
111 - "Revalidation Failed"
réponses
requêtes
no-cache
no-store
max-age
max-stale
min-fresh
no-transform
only-if-cached
cache-extension
113 - "Heuristic Expiration"
public
private
no-cache
no-store
no-transform
must-revalidate
proxy-revalidate
max-age
s-maxage
cache-extension
214 - "Transformation Applied"
29 / 45
Exemple : je clique shift-reload
30 / 45
Cohérence : bilan
support pour :
⇒ GET / HTTP/1.1
• cohérence faible
Host: z80.info
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/2009072220 Iceweasel/3.0.6
• aucune(Debian-3.0.6-1)
réponse périmée ne survit un temps inni...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
• OK (adaptive TTL)
Accept-Language: en-us,en;q=0.5
• cohérence forte
Accept-Encoding: gzip,deflate
• aucune réponse périmée n'est jamais délivrée
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
• non scalable (revalidation systématique)
Keep-Alive: 300
Connection: keep-alive
• hétérogénéité
Pragma: no-cache
• contraintes par document ou par client
Cache-Control: no-cache
• OK avec le cache control
⇐ HTTP/1.1 200 OK
manque : invalidation/mise à jour
Date: Fri, 09 Apr 2010 07:51:36 GMT
Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPage/5.0.2.2635•
délicat à intégrer dans HTTP
Last-Modified: Sun, 07 Feb 2010 11:25:56 GMT
• état serveur
ETag: "35d02c7-490e-4b6ea344"
Accept-Ranges: bytes
• abilité/scalabilité
Content-Length: 18702
• pb administratifs
[...]
31 / 45
32 / 45
Certains fournisseurs n'aiment pas les
caches...
pratique du
cache busting
Mais comment congurer ce ... de
navigateur !
pour compter le nb de hits
⇐ HTTP/1.1 200 OK
•
Date: Fri, 09 Apr 2010 09:31:34 GMT
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
[...]
⇐ HTTP/1.0 200 OK
Date: Thu, 08 Apr 2010 13:11:50 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Vary: Cookie,Accept-Encoding,User-Agent
Last-Modified: Thu, 08 Apr 2010 11:16:22 GMT
•
explicite
• manuelle
• à partir d'un chier Proxy Auto Cong
• chier js avec fonction FindProxyForURL(url,host)
• forcée
• automatique
• WPAD
aucune
• interception (cache transparent)
34 / 45
33 / 45
WPAD
Exemple WPAD
Web Proxy Auto-discovery Protocol
⇒ DNS Standard query A wpad.esisar.inpg.fr
⇐ DNS Standard query response CNAME www.esisar.inpg.fr A 195.220.37.5
(proxy auto cong)
http://<host>:<port><path>
•
trouver l'URL du chier PAC
•
chaos de mécanismes d'auto-conf
⇒ HTTP GET /wpad.dat HTTP/1.1
Host: wpad.esisar.inpg.fr
⇐ HTTP HTTP/1.1 302 Redirect (text/html)
Location: http://www.esisar.inpg.fr/auto-proxy.pac
• port défaut 80, path défaut wpad.dat
• essayer dans l'ordre :
1 DHCP
2 SLP (Service Location Protocol rfc2608)
3 DNS wpad.example.com a) SRV b) TXT c) A
•
1 et 3c obligatoires
•
le chier précis en fct de
⇒ DNS Standard query A www.esisar.inpg.fr
⇐ DNS Standard query response A 195.220.37.55
⇒ HTTP GET /auto-proxy.pac HTTP/1.1
Host: www.esisar.inpg.fr
⇐ HTTP HTTP/1.1 200 OK (application/x-ns-proxy-autoconfig)
User-Agent
35 / 45
36 / 45
Proxy transparent
Interception niveau transport
•
switch L4 examine trac
if IP.proto=TCP
& TCP.ags = SYN
O
& TCP.dport = 80
•
n'est pas sélectionné par le client (aucune cong nécessaire)
•
intercepte les communications HTTP
•
usage
légende
then
(IP.src, IP.dst,
TCP.sport, TCP.dport)
setup_rewrite
(IP.src, IP.dest, TCP.sport, 80)
↔
• proxy cache classique
• obligatoire, sans cong
• applique ltrage (corporate)
(P,S,80,np)
(myIP, proxyIP, new_port,
P
80)
S4
(S,P,np,80)
• portail captif : page de login, ouvre l'accès Internet
(O,U,80,pc)
(U,O,pc,80)
•
doit retirer l'entrée quand
connexion terminée
•
peut rediriger sélectivement sur
U
IP.src ou IP.dst
37 / 45
38 / 45
Interception niveau application
Pb. avec interception
peut se baser sur données application
(requête)
•
O
nécessaire ouvrir connexion
(prétend être l'origine)
•
ou
cxion 2
puis ouvre 2ième connexion avec le
proxy (ou l'origine)
•
et relaie...
pas très catholique
•
si pb proxy, accès coupé
•
transparence
•
•
•
•
cxion 2
P
•
S7
souvent proxy in-path
authentication/personalisation
recherche DNS inutile
ouvre/ferme connexions TCP
format requête de type origin-form
cxion 1
•
routeur d'accès
•
pare-feu
•
NAT
•
proxy transparent
U
39 / 45
40 / 45
WCCP (Cisco)
WCCP
O
O
Web Cache Communication Protocol
P
R
•
le routeur intercepte au niveau 4
•
gère un cluster
R
• hash de l'adr. dest
• monitore proxys
P
P
overload-bypass
•
overload
P
plusieurs routeurs peuvent partager le
•
si le proxy est saturé
•
fait suivre les paquets (adr src client)
•
réponse en direct
cluster
U
U
41 / 45
42 / 45
WCCP
dynamic client bypass
O
4
blacklist (IPc,IPo)
2
R
1
R
: si l'intervention
(cachée) du proxy crée un problème
3 erreur
5
WCCP
P
4
503 Service unavailable
Retry−After: 0
P
1 U émet requête, R intercepte
2 P émet requête
gestion d'une hiérarchie
3 O répond erreur (peut être auth sur
R
adr. src ?)
4 P
à
P
rien à faire de particulier...
R : blackliste (IPu, IPo)
P répond 503 avec
Retry-After: 0
5 U retente
U
R n'intercepte pas
U
43 / 45
44 / 45
On a vu...
... l'usage des proxys côté client
•
réseau client
•
réseau opérateur
Quels usages côté serveur ?
45 / 45