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.


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

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.


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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.