VBScript: Désactiver la mise en cache de la réponse du serveur HTTP OBTENIR l'URL de demande
Je veux désactiver le cache utilisé lorsqu'une URL appel à un serveur est fabriqué à partir de VBScript au sein d'une application sur une machine Windows. Quelle est la fonction/méthode/de l'objet dois-je utiliser pour ce faire?
Lorsque l'appel est effectué pour la première fois, mon basé sur Linux Apache serveur renvoie une réponse de la CGI script Perl qui il est en cours d'exécution. Cependant, les passages suivants du script semblent utiliser la même réponse que pour la première fois, de sorte que les données sont mises en cache quelque part. Mes journaux de serveur de confirmer que le serveur n'est pas appelée dans les périodes suivantes, que dans le premier temps.
C'est ce que je suis en train de faire. Je suis en utilisant le code suivant à partir de l'intérieur d'une application commerciale (ne souhaitez pas parler de cette application n'est sans doute pas pertinent à mon problème):
With CreateObject("MSXML2.XMLHTTP")
.open "GET", "http://myserver/cgi-bin/nsr/nsr.cgi?aparam=1", False
.send
nsrresponse =.responseText
End With
Est-il une fonction/méthode sur le dessus de l'objet à désactiver la mise en cache, ou devrais-je appeler une méthode/fonction pour désactiver la mise en cache sur un objet de réponse avant de faire de l'URL?
J'ai regardé ici pour une solution: http://msdn.microsoft.com/en-us/library/ms535874(SV.85).aspx - pas tout à fait assez utile. Et ici: http://www.w3.org/TR/XMLHttpRequest/ - très désagréable et difficile à lire.
J'essaye aussi de force de ne pas utiliser le cache à l'aide d'en-tête http paramètres et document html en-tête de méta-données:
Extrait de côté serveur Perl CGI script qui renvoie la réponse au client appelant, d'expiration à 0.
print $httpGetCGIRequest->header(
-type => 'text/html',
-expires => '+0s',
);
En-tête Http paramètres dans la réponse envoyée au client:
<html><head><meta http-equiv="CACHE-CONTROL" content="NO-CACHE"></head>
<body>
response message generated from server
</body>
</html>
Le au-dessus de l'en-tête http et html document tête paramètres n'ont pas fonctionné, d'où ma question.
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que l'objet XMLHTTP lui-même fait même de mettre en œuvre la mise en cache.
Vous envoyer une nouvelle demande dès que vous appelez
.send()
sur elle. Le point de l'ensemble de la mise en cache est pour éviter l'envoi de la demande, mais qui n'arrivera pas (autant que votre exemple de code va).Mais si l'objet est utilisé dans un navigateur quelconque, alors le navigateur peut mettre en œuvre la mise en cache. Dans ce cas, l'approche la plus répandue consiste à inclure un cache-disjoncteur dans l'énoncé: un hasard paramètre d'URL vous changent chaque fois que vous effectuez une nouvelle demande (comme, en y ajoutant le temps actuel de l'adresse URL).
Alternativement, vous pouvez faire de votre serveur d'envoyer un
Cache-Control: no-cache, no-store
HTTP en-tête et voir si cela aide.La
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE>
est probablement inutile et vous pouvez déposer entièrement.Cache-Control: no-cache
en-tête HTTP? Cela devrait permettre d'éviter la mise en cache. (Mais le cache-disjoncteur sera certainement le travail, peu importe les circonstances.)Vous pouvez utiliser WinHTTP, qui ne met pas en cache les réponses HTTP. Vous faut-il encore ajouter le cache directive de contrôle (Cache-control: no-cache") à l'aide de la SetRequestHeader méthode, car elle indique des serveurs proxy et des servers de ne pas retourner précédemment mis en cache la réponse.
Si vous avez le contrôle sur l'application ciblée par la Demande XMLHTTP (ce qui est vrai dans votre cas), vous pouvez le laisser envoyer des no-cache dans les en-têtes de la Réponse. Ceci a résolu le problème dans mon cas.
Comme alternative, vous pouvez aussi ajouter une chaîne de requête contenant un nombre aléatoire à chaque url demandée.