# Hyper Text Caching Protocol

HTCP, HyperText Caching Protocol ou Protocole de cache hypertexte est un protocole expérimental décrit dans la RFC 2756 utilisé pour partager et découvrir les contenus des caches (antémémoires) HTTP entre serveurs mandataires. Il permet également la gestion d'un groupe de serveurs cache HTTP et la surveillance mutuelle.
Contrairement au protocole ICP conçu pour le HTTP/0.9, qui ne conserve que les données d'un objet liées à une URI, HTCP conserve également les éléments d'en-tête lui permettant de partager différents objets en cache liés à une même URI, assurant une compatibilité HTTP/1.0 et HTTP/1.1.
Il étend les possibilités de gestion des caches en partageant :
* les ajouts ;
* les suppressions ;
* les demandes de suppression immédiates ;
* des indications (sur quel serveur cache tiers trouver un objet indisponible sur la toile...) ;
sur des objets web au sein d'une grappe de serveurs caches implémentant HTCP.
Un mécanisme d'authentification entre serveurs de cache permet de n'accepter des modifications de cache que des serveurs authentifiés. Ce mécanisme permet d'assurer l'intégrité des caches d'un groupe de serveurs de confiance. La sécurité repose sur un (ou plusieurs) secret partagé.
Les serveurs mandataires qui supportent HTCP :

## Structure des messages HTCP

Un message HTCP comprend trois sections:
* l'en-tête (header),
* les données (data),
* l'authentification.
En-tête La longueur de l'en-tête est fixée à 6 octets.
Données Les données ont une longueur variable limitée par la taille maximale d'un message HTCP moins la taille de l'authentification.
Authentification Permet de transférer les éléments d'authentification inter serveurs de cache.
L'en-tête ICP contient trois champs.
En-tête HTCP :
| Bit offset | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 |
| 0 | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message |
| 16 | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message |
| 32 | Version majeure | Version majeure | Version majeure | Version majeure | Version majeure | Version majeure | Version majeure | Version majeure | Version mineure | Version mineure | Version mineure | Version mineure | Version mineure | Version mineure | Version mineure | Version mineure |
La longueur est la longueur totale du message HTCP. Les versions majeures ne sont pas forcément rétrocompatibles.
La partie données dépend de la version HTCP signalée dans l'en-tête.
Données HTCP/0.0 :
| Bit offset | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 |
| 0 | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données | Longueur des données |
| 16 | Opcode | Opcode | Opcode | Opcode | Code réponse | Code réponse | Code réponse | Code réponse | Réservé | Réservé | Réservé | Réservé | Réservé | Réservé | F1 | RR |
| 32 | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID |
| 48 | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID | Trans-ID |
| 64+ | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données |
Le champ RR désigne s'il s'agit d'une demande (1) ou d'une réponse (0).
La partie authentification est définie comme suit :
Authentification HTCP :
| Bit offset | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 |
| 0 | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification | Longueur de l'authentification |
| 16 | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification |
| 32 | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification | Heure de l'authentification |
| 48 | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature |
| 64 | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature | Expiration de signature |
| 80 | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé | nom de la clé |
| n | Signature | Signature | Signature | Signature | Signature | Signature | Signature | Signature | Signature | Signature | Signature | Signature | Signature | Signature | Signature | Signature |