Uniformisation de la vérification des liens
This commit is contained in:
@@ -15,29 +15,14 @@ Je le fais par plaisir du travail bien fait et par respect pour mes visiteurs, m
|
||||
|
||||
## Méthodologie
|
||||
|
||||
J'ai créé un script exploitant [cURL](https://curl.se/docs/) avec les paramètres suivants :
|
||||
Le script utilise désormais un fetch HTTP maison (basé sur [`undici`](https://github.com/nodejs/undici)) qui :
|
||||
|
||||
```javascript
|
||||
const args = [
|
||||
"--silent",
|
||||
"--location",
|
||||
"--fail",
|
||||
"--max-time",
|
||||
`${REQUEST_TIMEOUT_SECONDS}`,
|
||||
"--output",
|
||||
"/dev/null",
|
||||
"--write-out",
|
||||
"%{http_code}",
|
||||
"--user-agent",
|
||||
DEFAULT_USER_AGENT,
|
||||
"--request",
|
||||
method,
|
||||
url,
|
||||
];
|
||||
```
|
||||
|
||||
`DEFAULT_USER_AGENT` est un UA valide et régulièrement mis à jour.
|
||||
Je fais une première requête avec la méthode [`HEAD`](https://developer.mozilla.org/fr/docs/Web/HTTP/Reference/Methods/HEAD), et si cette requête échoue, j'en envoie une autre avec la méthode `GET`, après un délais de 5s.
|
||||
- génère un _user-agent_ réaliste à chaque exécution (bibliothèque `user-agents`)
|
||||
- envoie d'abord une requête [`HEAD`](https://developer.mozilla.org/fr/docs/Web/HTTP/Reference/Methods/HEAD) puis, en cas d'échec ou de code ≥ 400, une requête `GET` après un délai de 5s
|
||||
- suit les redirections manuellement (jusqu'à 5 sauts) et abandonne au-delà
|
||||
- applique un _timeout_ de 5 s par requête
|
||||
- envoie des en-têtes classiques d'un navigateur (`Accept`, `Accept-Language`)
|
||||
- n'enregistre pas de cookies
|
||||
|
||||
Trois cas de figure se présentent à ce stade.
|
||||
|
||||
@@ -91,9 +76,9 @@ Les requêtes ayant abouti à un _timeout_ ne sont pas renouvelées avant 1 sema
|
||||
|
||||
### Autres cas
|
||||
|
||||
Il arrive que cURL me renvoie une erreur HTTP 0 (qui n'existe pas réellement).
|
||||
L'examen des journaux détaillés de ces requêtes m'apprend qu'en général (mais pas toujours), le problème est essentiellement lié aux certificats du serveur (obsolescence, nom de domaine qui ne correspond pas, etc.).
|
||||
Il arrive que le fetch me renvoie un statut nul/0 (qui n'existe pas réellement).
|
||||
Dans la majorité des cas, le problème est lié aux certificats du serveur (obsolescence, nom de domaine qui ne correspond pas, etc.) ou à un refus de connexion.
|
||||
|
||||
Les requêtes aboutissant à un code HTTP 0 ne sont pas renouvelées avant 1 semaine.
|
||||
Les requêtes aboutissant à un code HTTP 0 ou à une erreur réseau ne sont pas renouvelées avant 1 semaine.
|
||||
|
||||
## Rapport
|
||||
|
||||
Reference in New Issue
Block a user