Wer fügt einen einzelnen Unterstrich-Abfrageparameter "_" hinzu?

74

Ich habe einen PHP-Server auf Apache, ich bekomme viele Anfragen sieht so aus,

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

Der Parameter _ wird der Anforderung auf mysteriöse Weise hinzugefügt. Ich versuche herauszufinden, wer das tut.

Vor Apache läuft ein NetScaler.

ZZ Coder
quelle
Warum ist die IP 10.1.1.211eine lokale IP, die von einem Router / Modem bereitgestellt wird?
RobertPitt
@RobertPitt wahrscheinlich die IP des NetScaler Upstream?
jfrobishow
oki fragte sich nur, nie
NetScaler

Antworten:

107

jQuery fügt einen solchen Parameter hinzu, um das Zwischenspeichern des IE zu umgehen.

Bearbeiten: Es wird nur zum Abrufen von Anforderungen hinzugefügt und nur, wenn der Optionscache falsch ist:

cache: false
Patricia
quelle
Ich verwende jQuery, aber es erscheint nicht in jeder Anfrage.
ZZ Coder
Verwenden Sie einen Ajax-Aufruf, bei dem Sie das Nocache-Attribut angeben? Es wird nur dann hinzugefügt und nur, wenn es sich um eine GET-Anforderung handelt. Siehe meinen Code unten von jQuery if (s.cache === false && type == "GET")
jfrobishow
Ich habe nur diesen einen AJAX-Aufruf auf meiner Seite und setze das Nocache-Attribut. Einige Anforderungen haben jedoch nicht den Parameter.
ZZ Coder
3
Beachten Sie, dass die Option cachestandardmäßig verwendet wird, falsewenn der Datentyp 'script'oder ist 'jsonp'. api.jquery.com/jQuery.ajax
Kaivosukeltaja
11
Ja, es hat meine Anfrage an die API einer Bank ruiniert, die keine zusätzlichen akzeptiert. Es kam aus dem Nichts wie "Surprise MotherF # $ & @!" -_-
Tancrede Chazallet
3

Wahrscheinlich handelt es sich um einen Dummy-Parameter, der vom Reverse-Proxy hinzugefügt wird, um die Bereitstellung von nicht zwischengespeicherten Inhalten zu erzwingen.

Artefakt
quelle
2

1283458471913 ist ein Unix-Zeitstempel in ms, wahrscheinlich ein Bot / Proxy, der sicherstellt, dass sie eine neue Seite und keine zwischengespeicherte Version erhalten.

Könnte auch jQuery sein, was dazu führen würde, dass bei einer AJAX-Anforderung von Ihnen das Nocache-Attribut auf true gesetzt ist.

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 : "");
}
jfrobishow
quelle
0

Ajax-Tools wie jQuery können den Browser auffordern, das angeforderte Ergebnis nicht zwischenzuspeichern, sodass jede Anforderung von der geladenen Webseite zum Webserver geleitet wird und die neueste Antwort erhält.

Um dies zu erreichen, setzen Sie das cacheFlag als false, und ein zusätzlicher Abfrageparameter wie _=1234567890wird an die Anforderungs-URL angehängt. Natürlich ändert sich die Anzahl ständig, so dass der Browser dies als brandneue Anfrage betrachtet und keine zwischengespeicherten Dinge bereitstellt.

Themenfeld
quelle