http请求中“& rnd =”参数的用途是什么?

时间:2011-10-19 12:38:39

标签: javascript html http get query-string

所有!

为什么某些网络应用程序使用http-get参数“& rnd =”?它的目的是什么? 这个标签解决了哪些问题?

4 个答案:

答案 0 :(得分:7)

这可能是为了确保页面/图像/不是从用户的缓存中获取的内容。如果链接每次都不同,那么浏览器将从服务器而不是从缓存中获取它,确保它是最新版本。

也可以通过网站跟踪人们的进度。最好用一个小故事解释:

  1. 用户访问example.com。所有链接都给出相同的随机数(比方说4)。
  2. 用户在新窗口/选项卡中打开链接,链接为page2.php?rnd = 4。此页面中的所有链接均以随机数7开头。
  3. 用户可以从原始选项卡或新选项卡中单击指向page3.php的链接,服务器上的分析软件可以通过rnd = 4还是rnd = 7来判断哪一个。
  4. 我们所能做的只是建议可能性。没有一个标准的理由将rnd =放在URL中,如果没有看到服务器软件,我们无法知道网站设计者的动机。

答案 1 :(得分:6)

Internet Explorer和其他浏览器将读取图像URL,下载图像并将其存储在缓存中。

如果您的应用程序要定期更新图像,并且您希望用户看不到缓存的图像,则每次都需要URL唯一。

因此,添加随机字符串可确保它是唯一的,并且每次都会下载到缓存中。

答案 2 :(得分:4)

它几乎总是用于缓存破坏。

答案 3 :(得分:2)

正如其他人所建议的那样。当您调用返回动态内容数据的页面时,通常会使用此类行为来避免缓存问题。

例如,假设您有一个页面可以获取一些当前用户信息,例如“mysite.com/CurrentUserData”。现在,在第一次调用此页面时,将按预期返回用户数据,但根据时间和缓存设置,第二次调用可能会返回相同的数据 - 即使预期数据可能已更新。

缓存的主要原因当然是优化频繁请求的速度。但是在不需要这种情况的情况下,添加随机值作为查询字符串参数是众所周知的解决方案。

然而,还有其他方法可以解决这个问题。例如,如果您使用javascript / JQuery执行Ajax请求。您可以在通话中将缓存设置为false ...

$.ajax({url: 'page.html', cache: false});

您还可以使用...

更改文档加载时的所有页面调用
$.ajaxSetup({cache: false}});

如果您要执行MVC应用程序,您甚至可以使用类似的属性禁用控件操作方法的缓存...

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult NonCacheableData()
{
    return View();
}

(感谢来自here的快速复制和粘贴)

我敢说IIS中还有一些设置可以用来获得相同的效果 - 尽管我还没有那么远。