URL 附加“undefined”和“cache/xxx”

2024-03-05

首先,我认为这或多或少与自 2012 年 6 月 12 日以来,“未定义”随机附加在我网站上 1% 的请求网址中 https://stackoverflow.com/questions/11017609/undefined-randomly-appended-in-1-of-requested-urls-on-my-website-since-12-jun但由于我是新用户,无法评论这篇文章,而且还没有解决方案,我只能提出一个新问题。

自 2012 年 6 月 12 日 14:22 EET(第一个错误发生的那一刻)以来,我们遇到了非常奇怪的问题: 对我们网站的请求中,只有不到 1% 的请求末尾附加了“未定义”字符串或替换了 url 的有效部分,并且引荐来源网址是该网站的完全有效的 URL。例如我们收到一个请求http://example.com/foo/undefined http://example.com/foo/undefined带推荐人http://example.com/foo/bar http://example.com/foo/bar或要求http://example.com/undefined http://example.com/undefined带推荐人http://example.com/ http://example.com/(主页)。这些 URL 来自不同的客户端 IP 地址、不同的 ISP,浏览器通常是 Chrome,但也发生在 IE 和 Firefox 3.5 中。似乎有些东西正在将 URL 重写为无效的内容,并将原始 URL 保留在引用者标记中。 我们无法重现这个问题。

我们还遇到了源帖子评论中提到的另一个问题:我们正在收到以下表单的 URL 请求http://example.com/cache/xxx http://example.com/cache/xxx其中 xxx 看起来像 32 个字符的 MD5 字符串(例如:3d453e96e68cc01ced7920ae77356078 或 bbc80a4244caf556fdcaa9fb60231af7)。我们的任何有效 URL 中都没有“缓存”字符串。同一个 xxx 字符串可能会在几天甚至几周内来自不同的 IP。所有这些奇怪的请求都来自 Chrome 浏览器。此问题并非于 2012 年 6 月 12 日开始出现。这种情况至少从今年年初就发生过,但比第一次要罕见得多。我们也无法重现这个问题。

我们的网站位于 IIS 上,客户端主要基于 Javascript,并且我们使用 Prototype 框架(不是 jquery)。


答案总结

如果出现错误并且没有人知道错误在哪里,您将必须调试代码以查找可能引发错误的语句。现在我们有一些很好的工具可以帮助我们完成这项任务。

假设

  1. 如果使用 JavaScript 来设置或更改图像位置,有时会发生undefined进入 URI。

  2. 可能是一些 javascript 发出 http 请求,并且由于错误,它不是请求绝对 URL,而是请求“未定义”。

结论:我认为这个问题是由 JS 引起的。

在 Firefox 和 Chrome 上调试

安装和运行

  • 你应该下载火虫插件 https://addons.mozilla.org/pt-BR/firefox/addon/firebug/,如果您想在 Firefox 中尝试。然后按 F12,您将看到一个带有一些选项卡的窗口。您将需要激活一些选项卡:如“控制台”、“脚本”、“网络”。通过打开它们、阅读面板信息并单击激活链接来激活。

  • 对于 Chrome,只需检查是否Chrome 的开发者工具 https://developers.google.com/chrome-developer-tools/docs/overview已安装。然后按 F12。

调试

  • 在 Firefox 中,导航到一个有错误的页面,打开 Firebug 并激活“网络”面板。在网络面板中会有几个选项:“清除”、“保留”、“全部”、“Html”等。确保该选项ALL被选中。不要在页面上执行任何操作,也不要将鼠标悬停在页面上的任何内容上。查看 GET 和 POST 请求。对无效 URL 的请求可能会显示为红色,并具有 404 Not Found 或类似状态。如果“全部”选项卡中没有出现任何内容,请确保在进入该页面之前打开了 Firebug。要进行故障排除,请刷新页面并重做该部分。

  • 在 Chrome 中,使用 CDT(Chrome 开发人员工具的缩写)导航到一个有问题的页面,打开并选择“网络”面板。作为 Firebug,请确保该选项ALL被选中后,它将位于左下角图标之后。不要在页面上执行任何操作,也不要将鼠标悬停在页面上的任何内容上。对无效 URL 的请求可能会显示为红色,并具有 404 Not Found 或类似状态。如果“网络”选项卡中没有出现任何内容,请确保在进入该页面之前打开了 CDT。要进行故障排除,请刷新页面并重做该部分。

还是看不到

  • 对于两者,开始触发一些 Javascript 事件,例如悬停、单击 e 等,并密切关注面板。它将追踪您的所有请求,无论是好的请求还是坏的请求。继续关注不良请求,如果不良请求没有出现,这将需要创造力。这些事件将触发请求,您将能够看到它们。看到它们,您将能够知道或发现问题以及该问题的原因。欲了解更多资源CDT网络 https://developers.google.com/chrome-developer-tools/docs/network and 萤火虫网 http://getfirebug.com/network/.

PS:如果面板变脏,请单击清除按钮或图标来清除面板中的请求

  • 如果您提交页面并看到失败的请求很快就会消失,但由于下一页加载而丢失,请通过单击 Firebug 上的“持久”或网络面板左上角或“保留日志”图标来启用持久性。网络面板的左下角。一旦发生了,而且应该考虑一下你做了什么来实现这一点。看看你能否让它再次发生。在弄清楚是什么用户交互导致了这种情况发生后,深入研究该代码并开始查找发出无效请求的内容,并且永远不要忘记查看请求标头。您可以使用“脚本”选项卡在 JavaScript 中设置断点并单步执行它们。调查通过 $(elemment).bind/click/focus/etc 或旧式事件属性(如 onclick=""/onfocus="" 等)完成的事件处理程序。

  • 如果您无法触发错误的请求,那么您的测试就不会触发任何导致该请求的原因。尝试使用更多的东西。关键是你应该能够以某种方式使请求发生。你只是还不知道。它必须显示在网络面板中。唯一不会发生的情况是当你没有做任何触发它的事情时。

我们在您的代码中寻找什么

var url = workingUrl + someObject['someProperty'];

var url = workingUrl + someObject.someProperty;

var url = workingUrl + $.md5("message"); //For the /cache/ problem. JQuery Plugin

var url = workingUrl + hex_md5("message"); //For the /cache/ problem. MD5 Implementation

<a href= "javascript:;" class="small_img" >
  //Code here
</a>

window.open('/image.?url_image=' + currentImage,winName,features);

PS.: someObject 可能是一个对象{}, 数组[],或任何内部浏览器类型。重点是,将访问不存在的属性。

结论:这里没有免费的午餐,要知道到底发生了什么。然而,使用调试方法,您应该能够发现、更接近或理解问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

URL 附加“undefined”和“cache/xxx” 的相关文章

随机推荐