HTTP et assets
La vérification par défaut — la page répond, avec le bon statut, dans le délai, et ses fichiers JS et CSS existent encore.
Mis à jour le 11 septembre 2026
Sur cette page
- Ce que PostShip vérifie
- Régler
- Ce qui déclenche une alerte
- Limites et plans
- Dépannage
- Pourquoi la page est en échec alors qu'elle s'ouvre dans mon navigateur ?
- Pourquoi le statut attendu n'est pas respecté alors que le serveur renvoie 200 ?
- Pourquoi le contenu attendu est absent alors qu'il est bien sur la page ?
Une cible HTTP est ce que PostShip ajoute quand vous collez une URL sans rien préciser. Elle demande la page comme un visiteur, lit le statut, mesure le temps de réponse, cherche le contenu attendu, puis vérifie que les scripts et feuilles de style référencés par la page répondent aussi. C'est cette dernière partie qui attrape le déploiement classique : la page reste en apparence au vert, mais elle charge un app.3f2a.js qui n'existe plus.
Ce que PostShip vérifie
- La requête. Un
GETavec le User-AgentPostShipBot/0.1 (+https://postship.fr), un délai de 12 secondes, et 5 redirections au plus — au-delà, le passage est en erreur « Boucle de redirection. ». Chaque saut est revérifié : PostShip ne suit jamais une redirection vers une adresse privée. Le corps est lu jusqu'à 512 Ko. - Le statut. Il doit être exactement le statut attendu — 200 par défaut. Un 301 ou un 302 sont suivis, donc le statut comparé est celui de la dernière réponse.
- Le TTFB. Le temps jusqu'au premier octet de la réponse, mesuré depuis les serveurs de PostShip. Il est toujours enregistré (page Performance) et devient un échec seulement si vous posez un seuil de latence.
- Le contenu attendu. « Doit contenir » et « Ne doit pas contenir », comparés comme un lecteur le ferait — détail sur Contenu attendu.
- Le HTML. Sur une réponse
text/html, PostShip relève le titre, la description, le canonical, leh1et l'og:title(ils alimentent le radar de mutation et le diff de ship) et vérifie que chaque bloc JSON-LD est du JSON valide. Titre ou description absents ne sont jamais un échec ici : beaucoup de pages légitimes n'en ont pas. - Les assets. Les
script srcetlink rel="stylesheet"de la page, même origine et https seulement (les scripts tiers ont leur propre contrôle : Scripts tiers), au plus 15, dans l'ordre du document. Chacun reçoit unHEAD— unGETsi le serveur répond 405 — sous le même délai de 12 secondes que la page. Un asset est cassé s'il ne répond pas, répond 400 ou plus, ou répond dutext/html(la page 404 d'un framework, servie en 200, à la place du fichier).
Régler
Au moment de l'ajout (Projet → URLs → « Ajouter une URL » → Options avancées), ou ensuite sur le détail de l'URL :
- Statut attendu : de 100 à 599. Utile pour surveiller qu'une ancienne adresse redirige bien (attendre 200 après suivi) ou qu'une page privée répond 401 sans en-tête.
- Doit contenir / Ne doit pas contenir : 200 caractères chacun.
- Nom et valeur du header (page privée) : pour une page derrière un secret partagé. Quatre noms sont acceptés —
Authorization,X-Monitoring-Key,X-Health-Token,X-Api-Key— et rien d'autre : unHostou unCookiepermettrait de détourner la requête ou de rejouer une session. L'en-tête n'est envoyé qu'à l'hôte d'origine, jamais à une redirection vers un autre hôte, jamais aux assets. La valeur est stockée hors de portée de votre session : elle s'écrit, elle ne se relit pas. - Seuil de latence : sur le détail de l'URL, panneau « Seuil de latence ».
Ce qui déclenche une alerte
| Code | Phrase de l'alerte |
|---|---|
| statut différent de l'attendu | https://acme.fr/checkout répond 503. |
asset:404:/_next/static/app.js | La page répond 200 mais un fichier statique est introuvable : /_next/static/app.js. |
asset:error:/style.css | Le fichier n'a pas répondu du tout (réseau, délai). |
expect_contains:Ajouter au panier | « Ajouter au panier » n'apparaît plus sur la page. |
expect_not_contains:Erreur 500 | « Erreur 500 » apparaît sur la page, et ne le devrait pas. |
ttfb_depasse:800:1243 | La page a mis 1243 ms à répondre, au-delà du seuil de 800 ms. |
json_ld_syntax_error | Le JSON-LD contient une erreur de syntaxe. |
html_unparsable | Le HTML retourné est illisible. |
Un passage en erreur (délai, boucle, DNS) ouvre aussi un incident, avec la raison en clair : https://acme.fr : Timeout (12s).
L'alerte part à la transition — quand la série d'échecs vient d'atteindre le nombre réglé dans Règles — et de nouveau seulement si la panne change de nature. Le retour au vert envoie « Rétabli ». Un fichier statique manquant coûte 25 points au Ship Score.
Limites et plans
| Free | Pro | Team | |
|---|---|---|---|
| URL surveillées (tous projets) | 3 | 15 | 50 |
| Cycle | 30 min | 5 min | 5 min |
| Assets vérifiés par page | 15 | 15 | 15 |
La vérification est identique sur tous les plans. Dans vos journaux, filtrez sur le User-Agent PostShipBot.
Dépannage
Pourquoi la page est en échec alors qu'elle s'ouvre dans mon navigateur ?
Regardez le détail de l'URL. Le cas le plus fréquent : un asset référencé par un HTML mis en cache et qui pointe vers le build précédent. Le navigateur a l'ancien fichier en cache, PostShip non. Purgez le cache du CDN ou attendez le prochain déploiement.
Pourquoi le statut attendu n'est pas respecté alors que le serveur renvoie 200 ?
Parce que PostShip suit les redirections et compare le dernier statut. Une page qui redirige vers une page de connexion en 200 passe ; une page qui redirige plus de cinq fois est en erreur.
Pourquoi le contenu attendu est absent alors qu'il est bien sur la page ?
Le corps est lu jusqu'à 512 Ko ; au-delà, le texte n'est pas vu. Le détail du passage indique bodyTruncated. Choisissez un texte qui apparaît tôt dans la page, ou allégez le HTML (Poids de page).