谁添加“_”单下划线查询参数?

IT技术 php javascript ajax apache http
2021-02-24 01:34:49

我有一个在 Apache 上运行的 PHP 服务器,我收到很多类似这样的请求,

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

_ 参数神秘地添加到请求中。我试图找出谁在这样做。

有一个 NetScaler 在 Apache 前面运行。

5个回答

jQuery 添加了一个类似的参数来绕过 IE 的缓存。

edit: it only adds it for get requests, and only if the option cache is false:

cache: false
是的,它只是破坏了我对不接受任何额外内容的银行 API 的请求。它不知从哪儿传来的,就像“惊喜 MotherF#$&@!” -_-
2021-04-23 01:34:49
请注意,如果数据类型为,则该选项cache默认为api.jquery.com/jQuery.ajaxfalse'script''jsonp'
2021-04-30 01:34:49
我确实使用 jQuery,但它不会出现在每个请求中。
2021-05-01 01:34:49
我的页面上只有这个 AJAX 调用,而且我确实设置了 nocache 属性。但是,有些请求没有参数。
2021-05-10 01:34:49
您是否正在使用一些 ajax 调用来指定 nocache 属性?只有当它是 GET 请求时才会添加它。请参阅下面的 jQuery if(s.cache === false && type == "GET") 代码
2021-05-11 01:34:49

可能这是反向代理添加的虚拟参数,用于强制提供非缓存内容。

1283458471913 是一个以毫秒为单位的 unix 时间戳,可能是一个机器人/代理,以确保他们获得一个新页面而不是缓存版本。

也可能是 jQuery,它会导致您将 nocache 属性设置为 true 的 AJAX 请求。

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

Ajax 工具,如 jQuery,能够要求浏览器不要缓存请求的结果,因此来自加载的网页的每个请求都将传送到 Web 服务器并获得最新的响应。

为了实现这一点,将cache标志设置false,然后_=1234567890在请求 URL 中附加一个额外的查询参数,如当然这个数字一直在变化,所以浏览器认为这是一个全新的请求,不会提供任何缓存的东西。