86 votes

Qui a ajouté le paramètre de requête "_" avec trait d'union ?

J'ai un serveur PHP fonctionnant sur Apache, je reçois beaucoup de requêtes qui ressemblent à ceci,

10.1.1.211 - - [02/Sep/2010:16:14:31 -0400] "GET /request?_=1283458471913&action=get_list HTTP/1.1" 200 547 0 "http://www.example.com/request" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)" 28632 15602

Le paramètre _ est mystérieusement ajouté à la demande. J'essaie de savoir qui fait cela.

Un NetScaler est installé devant Apache.

0 votes

Pourquoi l'IP 10.1.1.211 Il s'agit d'une IP locale fournie par un routeur/modem, n'est-ce pas ?

0 votes

@RobertPitt probablement l'IP du NetScaler en amont ?

0 votes

Oki Je me posais juste la question, je n'ai jamais utilisé NetScaler.

118voto

Patricia Points 5221

JQuery ajoute un paramètre de ce type pour contourner la mise en cache d'IE.

éditer : il ne l'ajoute que pour les requêtes get, et seulement si l'option cache est fausse :

cache: false

0 votes

J'utilise jQuery, mais il n'apparaît pas dans toutes les demandes.

0 votes

Utilisez-vous un appel ajax où vous spécifiez l'attribut nocache ? Il ne sera ajouté qu'à ce moment-là et uniquement s'il s'agit d'une requête GET. Voir mon code ci-dessous à partir de jQuery if(s.cache === false && type == "GET")

0 votes

Je n'ai qu'un seul appel AJAX sur ma page et j'ai défini l'attribut nocache. Cependant, certaines requêtes n'ont pas le paramètre.

10voto

Colin Hebert Points 40084

4voto

Artefacto Points 50896

Il s'agit probablement d'un paramètre factice ajouté par le proxy inverse pour forcer le contenu non mis en cache à être servi.

4voto

jfrobishow Points 1609

1283458471913 est un timestamp unix en ms, probablement un bot/proxy s'assurant qu'ils obtiennent une page fraîche et non une version mise en cache.

Il pourrait également s'agir de jQuery, qui provoquerait ce problème pour les requêtes AJAX si l'attribut nocache est défini sur true.

if ( s.cache === false && type == "GET" ) {
    var ts = now();
    // try replacing _= if it is there

    var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2″);
    // if nothing was replaced, add timestamp to the end

    s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
}

2voto

themefield Points 393

Les outils Ajax, comme jQuery, sont capables de demander au navigateur de ne pas mettre en cache le résultat demandé, de sorte que chaque requête de la page web chargée sera transmise au serveur web et obtiendra la réponse la plus récente.

Pour ce faire, définissez cache comme false puis un paramètre de requête supplémentaire, comme _=1234567890 est ajouté à l'URL de la demande. Bien entendu, le numéro change en permanence, de sorte que le navigateur considère qu'il s'agit d'une toute nouvelle demande et ne fournira pas d'éléments mis en cache.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X