Est-ce que les demandes de cache CURL?


19

C'est une assez longue question, alors soyez indulgent avec moi.

Je voulais souligner mon serveur Akamai connecté depuis une instance AWS. J'ai donc commencé à utiliser ab benchmark. Cependant, ils semblaient ridiculement rapides pour télécharger ~ 3 Mo de fichiers vidéo. Naturellement, je voulais voir ce qui se passait. Voici ce que j'ai fait pour obtenir le fichier

curl -v -o / dev / null

Ce qui précède s'est terminé en ~ 5 secondes.

Ensuite, j'ai exécuté à nouveau la même commande. Cette fois, elle s'est terminée en ~ 200 ms! Naturellement, mon intuition dit que le fichier est mis en cache quelque part.

Mes questions:

  1. Curl cache-t-il les fichiers? Si oui, existe-t-il un moyen de l'ignorer?
  2. Si curl ne fonctionne pas, l'ubuntu résume-t-il un cache sous curl? Si oui, existe-t-il un moyen de l'ignorer?
  3. Compte tenu des exigences, pensez-vous qu'il pourrait y avoir un outil d'analyse comparative en dehors de ab qui pourrait servir l'objectif?

Merci, Akshay

Réponses:


15

Le client curl ne met pas les fichiers en cache, mais le réseau du serveur distant pourrait bien l'être. Essayez d'ajouter une variable de chaîne de requête arbitraire à l'URL pour voir si vous pouvez la reproduire.


Merci pour votre réponse. Je n'ai pas pu ajouter de chaîne de requête arbitraire car le serveur Akamai que j'utilise n'accepte aucun paramètre de requête! (forçant l'erreur car elle repose sur un condensé de jetons salés d'horodatage et d'URL). Cependant, j'ai pu générer plusieurs jetons pour le même chemin (essentiellement plusieurs URL) et vous avez absolument raison. curl ne mettait aucun fichier en cache - le serveur distant l'était. Allez CDN! :)
Akshaya Shanbhogue

6

Tardivement, essayez:

curl -v -H "Cache-Control: no-cache"

Cela indiquera au serveur Web de ne pas mettre en cache. N'arrête pas les couches en dessous de la mise en cache, sauf s'il est codé pour obéir aux en-têtes.


0

J'ai utilisé cette commande curl avec un paramètre cache buster.

curl http://example.com/static/changing_file?_=$(date +%s)

date +%simprime les secondes depuis l'époque, si vous appelez l'URL plus d'une fois par seconde, utilisez date +%s.%Npour ajouter des nanosecondes.


0

Vous pouvez utiliser ajouter une chaîne de requête aléatoire à l' aide de la $RANDOMvariable d'environnement:

curl --location --silent "https://git.io/lsf-e2e?$RANDOM"

Cela a fonctionné pour moi sur les fichiers bruts github.


-2

Peut-être que votre DNS met en cache la résolution du nom et c'est la raison de la différence dans le temps de réponse.

Ce n'est qu'une théorie.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.