"undefined"和"cache/xxx"附加到URL

Zdr*_*vko 8 javascript browser http

首先,我认为这或多或少与2012年6月12日我网站上1%的请求网址中随机附加的"未定义"问题相同,但由于我是新用户,因此无法对此帖发表评论而且没有解决方案,我只能问一个新问题.

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

我们还解决了源文章评论中提到的另一个问题:我们正在接收http://example.com/cache/xxx格式的URL请求, 其中xxx看起来像32个字符的MD5字符串(例如:3d453e96e68cc01ced7920ae77356078或bbc80a4244caf556fdcaa9fb60231af7).我们的任何有效网址中都没有"缓存"字符串.同一个xxx字符串可能来自不同的IP,持续数天甚至数周.所有这些奇怪的请求都来自Chrome浏览器.此问题未在2012-06-12开始.它至少从今年年初开始发生,但比第一次更为罕见.我们也无法重现这个问题.

我们的网站是在IIS上,客户端是基于Javascript的,我们使用的是Prototype框架(不是jquery).

wal*_*.ar 6

答案摘要

如果出现错误并且没有人知道它在哪里,则必须调试代码以查找可能是错误启动器的语句.如今我们有一些很好的工具可以帮助我们完成这项任务.

假设

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

  2. 将是一些javascript发出http请求,由于一个错误,而不是请求一个绝对网址,它正在请求"未定义".

结论:这个问题,我相信是由JS引起的.

在Firefox和Chrome上进行调试

安装和运行

  • 如果您将尝试使用Firefox,则应下载FIREBUG ADDON.然后按F12,您将看到一个带有一些标签的窗口.您需要激活一些标签:如"控制台","脚本","网络".通过打开它们,阅读面板信息并单击激活链接来提供激活.

  • 对于Chrome,只需检查是否已安装CHROME'S DEVELOPERS TOOL.然后按F12.

调试

  • 在Firefox中,导航到一个错误的页面,打开Firebug并激活Net面板.在Net面板中会有几个选项:'Clear','Persist','All','Html'等.确保选中ALL选项.不要在页面上做任何事情,尽量不要鼠标悬停在页面上.查看GET和POST请求.对无效URL的请求可能会显示为红色,状态为404 Not Found或类似.如果"全部"选项卡中没有任何内容,请确保在进入页面之前打开了Firebug.对于故障排除刷新页面并重做该部分.

  • 在Chrome中,导航到带有CDT的错误页面,Chrome开发者工具的缩写,打开并选择了"网络"面板.作为Firebug,确保选中ALL选项后,它将位于图标后左下角.不要在页面上做任何事情,尽量不要鼠标悬停在页面上.对无效URL的请求可能会显示为红色,状态为404 Not Found或类似.如果"网络"选项卡中未显示任何内容,请确保在进入页面之前打开CDT.对于故障排除刷新页面并重做该部分.

还是看不到它

  • 对于两者,开始触发一些Javascript事件,例如悬停,单击e等,并密切关注面板.它将跟踪您的所有要求,包括好的和坏的.专注于不良请求,如果没有出现不良请求,这将需要创造力.事件将触发请求,您将能够看到它们.看到他们,你将能够知道或发现问题,也可能是问题的原因.有关更多资源CDT NetworkFirebug Net.

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

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

  • 如果您无法触发错误请求,那么导致它的任何内容都不会被您的测试触发.尝试使用更多东西.关键是你应该能够以某种方式使请求发生.你还不知道.它必须出现在Net面板中.唯一不会在你不做任何事情的时候触发它.

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

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);
Run Code Online (Sandbox Code Playgroud)

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

结论:这里没有免费的午餐可以知道究竟发生了什么.但是,使用调试方法,您应该能够发现,接近或理解问题.


Wil*_*rro 3

基于这篇文章,我对“Complitly”Chrome插件/恶意软件进行了逆向工程,发现该扩展程序注入了“改进的自动完成”功能,该功能在每个具有 NAME 或 NAME 的输入文本字段的网站上抛出“未定义”请求“search”、“q”等的 ID。

我还发现enable.js 文件(complitly 文件之一)正在检查一个名为“suggestmeyes_loaded”的全局变量,以查看它是否已加载(如单例)。因此,将此变量设置为 true 会禁用该插件。

TL:博士;

要禁用恶意软件并停止“未定义”请求,请将其应用于站点上带有搜索字段的每个页面:

<script type="text/javascript">
    window.suggestmeyes_loaded = true;
</script>
Run Code Online (Sandbox Code Playgroud)

该恶意软件还会将您的用户重定向到“searchcompletion.com”网站,有时会显示竞争对手的 ADS。所以,应该认真对待。