cnumr / cnumr/GreenIT-Analysis

[Firefox] Mauvaise prise en compte des requêtes qui tapent le cache

Open
#84 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
161
Forks
38
PR merge metrics
No merged PRs in 30d

Description

Bonjour,

Je rencontre le problème actuellement sur Firefox 138.0.4 (64 bits) sur Ubuntu.
_Le problème n'est pas présent dans Chrome._

Les requêtes effectuées plusieurs fois dans la même page sont automatiquement mises en cache par Firefox (Par exemple une image).
Exemple sur la page https://greenit.eco/ :
L'image https://greenit.eco/wp-content/uploads/2024/11/gri-logo-asso-regular-dark.svg est chargée 2 fois dans la page.
Elle apparaît 2 fois dans l'onglet Réseau (Un appel réel et un appel dont la taille de transfert est "mis en cache").
_A la différence de Chrome où la requête n’apparaît qu'une seule fois_

Ces requêtes devraient être ignorés dans les différents calculs du plugin car les informations qu'ils contiennent sont erronées :
- La taille de la réponse est incorrecte : 118.37Ko dans mon cas alors que l'image fait 14.21Ko.
- Le protocole utilisé est incorrect : HTTP/1.1 alors que la requête originale est en HTTP/2 et qu'en tapant le cache, le protocole importe peu.

Cela est sans doute plus ou moins corrélé avec les autres issues qui remontent que les données entre les différents navigateurs sont différentes.
Par exemple, sur l'un de mes sites de test, le nombre de requête sur la page passe de 398 sur chrome à 440 sur Firefox uniquement parce certaines images (A priori une 40aine) sont inclues 2 fois dans le DOM.
Pour la même raison, le plugin me remonte une erreur sur l'utilisation d'HTTP/2 car toutes les images provenant du cache remontent en utilisant HTTP/1.1

Je ne peux pas ouvrir de PR car je ne connais pas assez bien le format HAR pour savoir quelle donnée est pertinente à vérifier pour valider que la requête vient bien d'un cache :
Ci-dessous, un exemple de résultat HAR pour le retour du cache.
```json
{
"startedDateTime": "2025-05-23T10:53:42.198+02:00",
"request": {
"bodySize": 0,
"method": "GET",
"url": "https://greenit.eco/wp-content/uploads/2024/11/gri-logo-asso-regular-dark.svg",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Host",
"value": "greenit.eco"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:138.0) Gecko/20100101 Firefox/138.0"
},
{
"name": "Accept",
"value": "image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5"
},
{
"name": "Accept-Language",
"value": "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate, br, zstd"
},
{
"name": "Referer",
"value": "https://greenit.eco/"
}
],
"cookies": [],
"queryString": [],
"headersSize": 0
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"headers": [],
"cookies": [],
"content": {
"mimeType": "image/svg+xml",
"size": 118368,
"text": ""
},
"redirectURL": "",
"headersSize": 0,
"bodySize": 0
},
"cache": {},
"timings": {},
"time": 0,
"pageref": "page_2"
}
```

Plusieurs détails peuvent sans doute permettre d'identifier que ce n'est pas une vraie requête :
response.bodySize == 0 ET response.headersSize == 0 : A priori, je ne vois aucun cas où une réponse HTTP ne renverrait ni contenu ni header ? Peut être à cumuler avec response.content.size != 0 ? Car une requête avec un contenu mais sans body me semble assez peu concevable dans un autre cas ?
timings == {} : A priori, sans timing, une requête n'a pas été exécutée et est donc une "fausse" requête ?
time == 0 : Même constat qu'avant, a moins d'avoir une réponse instantanée d'un serveur ?

Qu'en pensez-vous ?
Cordialement,
Baptiste

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by locating the HAR parsing and request-calculation entry points, then compare the Firefox cached-request example in this issue with a real network response. Check how response.bodySize, response.headersSize, cache, timings, and time are represented before deciding which evidence identifies a cached request. Done means cached entries no longer distort request counts, response sizes, or protocol calculations while ordinary requests remain included.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
devtools, performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.