PubSubHubbub
2014-09-25
Ce document était originellement un court article en anglais publié le 19 juin 2011 quand je m’intéressais à Status.net basé sur le protocole OStatus utilisant PubSubHubbub.
PubSubBubbub (Publishers and Subscribers Hubbub) est un protocole permettant aux abonnés (subscribers) d’un flux (RSS/Atom) d’être informé (le serveur effectue un push) d’une mise à jour immédiatement, plutôt que de ne la découvrir que lors de la prochaine consultation du flux (le client effectuant un pull).
Abonnement
Le flux doit contenir une information supplémentaire, à savoir l’adresse du hub :
Par exemple, HUB_URI
pourrait être https://www.example.org/hub
.
Le client envoie une requête HTTP POST au hub. Comme pour d’autres requêtes de ce type, le contenu du corps de la requête est de la forme :
param1=value1¶m2=value2…
Si le client veut être prévenu d’une mise à jour du flux, il utilise les paramètres suivants :
Client POST Hub
hub_mode "subscribe"
hub_topic l'URL du flux
hub_callback l'URL à prévenir
hub_verify "sync" (synchrone) or "async" (asynchrone)
hub_verify_token un jeton pour vérifier l'URL de l'abonné
hub_secret un secret pour identifier le hub
hub_secret_mode l'algorithme à utiliser
À son tour, le hub envoie une requête à hub_callback
pour confirmer l’abonnement, avec les valeurs qui lui ont été fournies :
Hub GET Callback
hub_mode
hub_topic
hub_verify_token
Si c’est bien ce que l’abonné a demandé, il répond le code HTTP 202.
Mise à jour
Lors d’une mise à jour, le hub envoie un message à l’URL indiquée par le client. La requête POST a pour corps le bout de flux concerné et comporte un en-tête X-Hub-Signature
permettant de vérifier l’origine de la mise à jour.
X-Hub-Signature: hub_secret_mode + "=" + hash
Le hash est le résultat de l’algorithme sélectionné sur le contenu et sur le secret. Par exemple :
$hash = hash_hmac($secret_mode, $content, $secret)
Désabonnement
La requête de désabonnement est similaire à celle d’abonnement :
Client POST Hub
hub_mode "unsubscribe"
hub_topic l'URL du flux
hub_callback l'URL du client
hub_verify "sync" (synchrone) or "async" (asynchrone)
hub_verify_token un nouveau jeton pour confirmer
hub_secret le même secret que lors de l'abonnement
De même, le serveur transmet les valeurs à l’URL du client :
Hub GET Callback
hub_mode
hub_topic
hub_verify_token