Référence |
Le protocole ICAP permet de modifier les requêtes HTTP provenant d’un utilisateur, et/ou les réponses fournies par les serveurs distants. ICAP est utilisé dans Olfeo dans les cas suivants :
Intégration connecteur : échanges en ICAP entre l'équipement tiers et le moteur de filtrage. Étapes 2 et 6 : requêtes ICAP, étapes 3 et 7 : réponses ICAP.
Intégration proxy. Échanges entre le proxy et le moteur de filtrage : ICAP traite les réponses du serveur distant. Étape 6 : requête ICAP, étape 7 : réponse ICAP.
Lors des échanges ICAP, chaque requête HTTP est encapsulée dans une requête ICAP (voir exemple dans la section Preview). Pour comprendre le fonctionnement d'ICAP, il faut garder à l'esprit la distinction entre requêtes/réponses HTTP et requêtes/réponses ICAP (une requête ICAP pouvant par exemple contenir une réponse HTTP).
La première fois que le client ICAP se connecte au serveur ICAP (c'est-à-dire au connecteur vers lequel il doit envoyer les requêtes), il lui envoie d'abord une requête OPTIONS afin de connaître ses paramètres, en précisant REQMOD ou RESPMOD.
Exemple de requête OPTIONS envoyée par le client au serveur, pour le RESPMOD
OPTIONS icap://127.0.0.1:1343/respmod ICAP/1.0 Host: 127.0.0.1:1343
Réponse du serveur
ICAP/1.0 200 OK Date: Wed, 20 Apr 2016 10:50:34 GMT ISTag: "6.0.0" Cache-Control: max-age=0 Methods: RESPMOD Transfer-Preview: * Preview: 4096 Service: proto_icap/1.0 Service-ID: RESPMOD-service Encapsulated: null-body=0 Options-TTL: 216000 X-Include: X-Client-IP, X-Authenticated-User, X-Server-IP Max-connections: 100 Allow: 204
ICAP peut utiliser 2 méthodes :
Le client ICAP envoie la requête HTTP (modifiée ou non) au serveur distant.
Le client ICAP transmet le contenu au navigateur.
En RESPMOD, le preview permet d'obtenir les informations nécessaires pour évaluer les règles de l'onglet Aperçu du moteur de règles.
Ces informations peuvent permettre au moteur de filtrage de prendre une décision (bloquer ou autoriser), sans attendre d'avoir reçu l'intégralité des données, ce qui permet d'améliorer les performances.
Exemple de requête ICAP RESPMOD, avec en-tête Preview (étape 6 sur les schémas)
RESPMOD icap://127.0.0.1:1343/respmod ICAP/1.0 Host: 127.0.0.1:1343 Date: Wed, 20 Apr 2016 10:50:34 GMT Encapsulated: req-hdr=0, res-hdr=165, res-body=487 Preview: 4096 X-Client-IP: 127.0.0.1 GET http://support.olfeo.com/sites/olfeo/files/guide_utilisateur_olfeo_v596.pdf HTTP/1.1 User-Agent: Wget/1.16 (linux-gnu) Accept: */* Host: support.olfeo.com HTTP/1.1 200 OK Date: Wed, 20 Apr 2016 10:51:25 GMT Server: Apache/2.2.16 (Debian) Last-Modified: Thu, 29 Jan 2015 17:21:24 GMT ETag: "33c07fe-37454f-50dcdb7a42d00" Accept-Ranges: bytes Content-Length: 3622223 Cache-Control: max-age=1209600 Expires: Wed, 04 May 2016 10:51:25 GMT Content-Type: application/pdf f59 %PDF-1.4 %.... 4 0 obj << /Title (Solution Olfeo) /Author (Olfeo) /Creator (DITA Open Toolkit) /Producer (Apache FOP Version 1.1) /CreationDate (D:20130725094806+02'00') >> endobj 5 0 obj << /N 3 /Length 11 0 R /Filter /FlateDecode >> stream x...wTS.....7.P.....khR.H .H..*1..J..."6DTpDQ...2(...C.."...Q....D.qp...Id....y......~k....g.}.... ....LX....X.......g`......l..p..B..F...|..l....... ..*.?.......Y"1.P......\...8=W.%.O...4M.0J."Y.2V.s.,[|..e.9.2.<..s..e... '..9....`......2.&c.tI.@.o...|N6.(....sSdl-c.(2.-.y..H._../X........Z..$ ...&\S........M....0.7.#.1...Y..r.f..Y.ym..";.8980m-m.(..]....v.^....D.. ..W~. ...e....mi..]..P....`/....u.}q..|^R..,g+...\K..k)/......C_|.R....ax..8.t (contenu abrégé)
La taille de l'aperçu attendu par le serveur est définie dans les options du connecteur ICAP (paramètre Taille limite de Preview).
Dans certains cas, le serveur ne souhaite pas modifier la requête ou la réponse HTTP : par exemple, en REQMOD, parce que l'URL est autorisée, ou en RESPMOD, parce que le fichier n'est pas bloqué par une règle portant sur sa taille ou son type MIME, ou par l'antivirus. Le serveur peut alors renvoyer au client une réponse 204 No Modifications needed, qui ne contient aucune donnée. Le résultat est le même que s'il avait renvoyé au client la requête ou la réponse HTTP à l'identique :
La réponse 204 permet d'éviter de renvoyer les données et donc d'améliorer les performances.
Le client doit avoir déclaré accepter les réponses 204 en incluant un en-tête Allow: 204 dans sa requête.
Réponse ICAP RESPMOD avec 204 (étape 7 sur les schémas)
ICAP/1.0 204 No Modifications needed Date: Wed, 01 Jun 2016 10:39:36 GMT Server: proto_icap/1.0 ISTag: "6.0.0" Cache-Control: max-age=0 Encapsulated: null-body=0
Réponse ICAP RESPMOD sans 204 (la réponse du serveur est renvoyée telle quelle)
ICAP/1.0 200 OK Date: Wed, 01 Jun 2016 12:27:53 GMT Server: proto_icap/1.0 ISTag: "6.0.0" Cache-Control: max-age=0 Encapsulated: res-hdr=0, res-body=243 HTTP/1.1 200 OK Date: Wed, 01 Jun 2016 12:27:53 GMT Server: Apache/2.4.18 (Ubuntu) Last-Modified: Mon, 21 Dec 2015 16:29:00 GMT ETag: "f71110-5276afc8e70cd" Accept-Ranges: bytes Content-Length: 16191760 Content-Type: application/zip 36ed PK.. ......{.G................apacheds-2.0.0-M21/PK.. ......{.G................apacheds-2.0.0-M21/bin/PK.. ......{.G................apacheds-2.0.0-M21/instances/PK.. ......{.G............%...apacheds-2.0.0-M21/instances/default/PK.. ......{.G............+...apacheds-2.0.0-M21/instances/default/cache/PK.. ......{.G............*...apacheds-2.0.0-M21/instances/default/conf/PK.. ......{.G............)...apacheds-2.0.0-M21/instances/default/log/PK.. ......{.G............0...apacheds-2.0.0-M21/instances/default/partitions/PK.. ......{.G............)...apacheds-2.0.0-M21/instances/default/run/PK.. ......{.G................apacheds-2.0.0-M21/lib/PK.. ......{.G3t.C-....M......apacheds-2.0.0-M21/LICENSE.....M......-........ \ms.F..._1...H....{...U.-.6.2.%)+.T.v..I. ....y...e..R..;..s.v-.....y...Q"..?..L6J\f.*..>..;U..,....X.$.FV{....g.. ............e.e.>.y)}.......\.&Cq1.....t2...3q=..b6..M....qLO ...l...?!.O.b.VY.....GF...QO...s.U..5..V.V.Y.")........V....*.&..c# .M3]W......".%U*.{1W..y....Yo...\...<W&.V.uW..:P,)w.*[ojQ.........{!.zSV ...zF..7....,..$.X..!c.@........%..7H.+!..b..3..FL....3.yi0h].y,d...9).. n...H....n..H2.......^./^....k.]......n}.3Rz..-N.S~..SU....K.DV..cQ."..t |.H.......B..:...M.1...n.h..}ZW...2w.F.H9.@.r..d;...V`.....}......r%.. o.5......pS...."...#$...%=....}........z..../..6K..U.0>......4*.zo3.).). ...[.Bm..%p..xm.....JU..N.....p.m.f.5I..:8+..!S.!.EY.<.f.:.Q.....K...... o...2b.....U.n*......>... ..U...?.w49..UUn..d#.......B.....}...WB 6.....42:..c...@......".....6.......[..>.[.fR..].....p. w.!iL8....@V.m....3......Vf.\......#.b.&...t.`. ...;xcK....U.5.......8. ..r....E.v.s~....v V...)/.N.....n...J.At.....q....Il...Rjt^AG1.50.!z..p)r....M.l.0.g....dV. 6#Wb..i.9. ,\V.'.a...&#.....)d}...9. x-[g..r..C<.8.j..Xt.g...l|G.M...Vf.|...(R......T..sP| .-!Z0N .U.....Q...%.8.....J.uT..^.@(79....g...`=g@s.l.uz...O(.S.D...mCo...).... (contenu abrégé)