自 2012 年 6 月 12 日以来,“未定义”随机附加在我网站上 1% 的请求网址中

2024-05-15

自 2012 年 6 月 12 日 11:20 TU 起,我在我的 varnish/apache 日志中看到非常奇怪的错误。

有时,当用户请求一页时,几秒钟后我会看到类似的请求,但 url 中最后一个 / 之后的所有字符串已被“未定义”替换。

例子:http://example.com/foo/bar http://example.com/foo/bar触发一个http://example.com/foo/undefined http://example.com/foo/undefined要求。

当然,这些“未定义”页面不存在,而是返回我的 404 页面(这是一个具有标准布局的自定义页面,而不是经典的 apache 404)

  • 任何页面都会发生这种情况(从主页到最深处)
  • 使用各种浏览器(主要是 Chrome 19,但也有 Firefox 3.5 至 12、IE 8/9...),但仅占流量的 1%。
  • 这些请求发送的标头是经典标头(并且没有ajax标头)。
  • 对于给定的IP,这似乎是随机发生的:有时在访问的第一个页面,有时在访问期间的随机页面,有时在访问期间的多个页面......

当然,它看起来像是一个 javascript 问题(我使用的是 google 托管的 jquery 1.7.2),但是我的 js/html 或服务器配置绝对没有任何改变已经好几天了,我以前从未见过这种错误。当然,html 中没有这样的链接。

我还注意到一些有趣的事实:

  • 未定义的请求永远不会被发现作为其他页面的引用者,而是使用“真实”页面作为同一 IP 的以下请求的引用者(用户可以使用 404 页面上的经典菜单)
  • 我在 Google Analytics 中没有看到这些页面的任何痕迹,所以我假设没有执行任何 javascript(所有页面上都存在跟踪器,包括 404)
  • 没有人就此事与我们联系,即使我在网站的社交网络中提到了这个问题
  • 大多数用户此后继续访问

所有这些事实让我认为问题在浏览器中悄然发生,可能是由有缺陷的附加组件、防病毒软件、浏览器栏或昨天更新的浏览器中集成的蹩脚制造商软件触发的(但我没有发现任何附加组件发布)昨天针对 chrome、firefox 和 IE)。

这里有人注意到同样的问题,或者有更完整的解释吗?


没有简单直接的答案。

您必须对此进行调试,由于 URL 中存在“未定义”一词,它可能是 JavaScript。然而,它不一定是 AJAX,它可以是 JavaScript 创建任何由浏览器自动解析的 URL(例如,在图像标签上设置 src 属性、设置 css-image 属性等的 JavaScript)。我用Firefox http://www.mozilla.org/en-US/firefox/new/ with Firebug http://www.mozilla.org/en-US/firefox/new/大部分时间都是安装的,所以我的指导会考虑到这一点。

Firebug 初始设置

如果您已经知道如何使用 Firebug,请跳过此步骤。

安装并重新启动 Firefox for Firebug 后,您将必须启用 Firebug 的大部分“面板”。要打开 Firebug,浏览器右上角会出现一个看起来像火虫/昆虫的小东西,或者您可以按 F12。单击 Firebug 选项卡“控制台”、“脚本”、“网络”,然后打开它们并阅读面板信息来启用它们。您可能需要刷新页面才能使它们正常工作。

调试用户交互

导航到存在 Firebug 打开且“网络”面板处于活动状态的问题的页面之一。在网络面板中会有几个选项:“清除”、“保留”、“全部”、“Html”等。确保选择全部。不要在页面上执行任何操作,也不要将鼠标悬停在页面上的任何内容上。查看请求。对无效 URL 的请求将显示为红色,并且状态可能为 404 Not Found(或类似)。

看到加载了吗?跳到下一部分。

在初始加载时没有看到它?开始使用您的页面并在此处继续。

开始单击每个功能,将鼠标悬停在所有内容上,等等。密切关注“网络”面板并注意失败的请求。您可能需要发挥创意,但请继续使用您的应用程序,直到您看到浏览器发出无效请求。如果页面发出很多请求,请随时点击网络面板左上角的“清除”按钮来清除它。

如果您提交页面并看到失败的请求很快消失,但由于下一页加载而丢失,请通过单击“网络”面板左上角的“持久”来启用持久性。

一旦发生了,而且应该考虑一下你做了什么来实现这一点。看看你能否让它再次发生。在弄清楚是什么用户交互导致了这种情况发生后,请深入研究该代码并开始查找发出无效请求的内容。

您可以使用“脚本”选项卡在 JavaScript 中设置断点并单步执行它们。调查通过 $(elemment).bind/click/focus/etc 或旧式事件属性(如 onclick=""/onfocus="" 等)完成的事件处理程序。

如果页面加载后立即发生请求

这将有点难以确定。您将需要转到“脚本”选项卡并开始向加载时运行的每个脚本添加断点。您可以通过单击 JavaScript 行的左侧来完成此操作。

重新加载页面,断点应该会阻止浏览器加载页面。按脚本面板上的“继续”按钮。转到您的网络面板,查看您的请求是否已提出,继续直到找到为止。您可以使用它来通过慢慢添加越来越多的断点然后单步进入和退出函数来缩小发出请求的范围。

您在代码中寻找什么

类似于以下内容:

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

var url = workingUrl + someObject.someProperty;

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

我没有看到任何 404/红色请求

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

结论

没有超级简单的方法可以确定到底发生了什么。然而,使用我概述的方法,您至少应该能够接近。这可能是您根本没有考虑到的事情。

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

自 2012 年 6 月 12 日以来,“未定义”随机附加在我网站上 1% 的请求网址中 的相关文章

  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • 我无法注入带有“!important”规则的样式[重复]

    这个问题在这里已经有答案了 我尝试使用以下代码注入样式 document body style color green important Per CSS 级联引用 http www w3 org TR CSS2 cascade html
  • 当名称是数组时如何使用 Javascript 修改 HTML Select

    我有两个同名的 html select 对象 它们是具有不同索引的数组 我想做的是 如果从类别 0 选择元素中选择 关闭 我想禁用类别 1 元素 我一直在尝试使用 document getElementsByName 但无法弄清楚如何专门针
  • 使用javascript在谷歌地图中绘制多边形

    我想在谷歌地图中绘制多边形 我正在使用示例代码http jsfiddle net rvsMH 1 http jsfiddle net rvsMH 1 但它不起作用并且没有获取数组或纬度 经度值 我不知道出了什么问题
  • 如何检测不渲染 .png 透明的浏览器

    我有这段代码可以根据一周中的某一天渲染图像 但在 IE6 及更低版本以及可能其他一些浏览器中 它不会呈现 png 不透明度 所以我想稍微改变一下 这样它就会检测到不渲染 alpha 透明度的浏览器 并告诉他们加载这个图像 img horar
  • 如何使用 AngularJS、Devise 和 UI Router 全局实现身份验证?

    我对 Angular 很陌生 所以这可能是一个新手问题 我正在尝试实现一个简单的任务管理器 只是一个练习 以 Rails 作为后端 以 Angular 作为前端 到目前为止 我遵循了教程 一切正常 现在我想在全球范围内实施身份验证 这意味着
  • 使用什么事件来在选择文本框中的值时显示警报消息

    我正在使用 jquery 的自动完成 api 来从数据库中获取名称 但是我想在从显示的文本框中选择名称时显示一条警报消息 我将显示一个图像以便更好地理解 当我输入 S 时 它将显示所有包含 S 的记录 所以问题是 如果我选择例如 Spars
  • Angular - Safari 无法正确显示 DOM

    我是 Angular 的新手 使用 Angular 4 我尝试通过在关联的组件类文件中设置属性来更新特定元素 但是 除非我尝试强制重新绘制网页 通过调整窗口大小等 否则页面不会更新 我打开检查器 看到 DOM 已更改 但显示与元素检查器中的
  • 使用 jQuery 的 javascript 关联数组长度

    我正在使用 javascript 关联数组 例如 var testarray testarray one 1 testarray two 2 testarray three 3 我也在旁边使用jquery 如何使用 jquery 或任何其他
  • 从 url 角度加载模板并在 div 内编译

    由于我是 Angular JS 的新手 我想知道如何加载外部模板并将其与一些数据一起编译到目标中div 例如我有这个模板
  • 将 ESLint 与 Airbnb 样式和选项卡结合使用 (React.js)

    我正在开发一个 React js 应用程序 并且正在尝试检查我的代码 我将 ESLint 与 Airbnb 风格一起使用 但出现以下错误 src Test jsx 4 2 error Unexpected tab character no
  • 如何按值删除数组中的多个项目?

    我正在尝试做一个removeAll 函数 它将删除具有该特定值 而不是索引 的数组的所有元素 当我们对循环进行任何更改时 棘手的部分就出现了 索引往往会移动 使其很难像我们想要的那样工作 并且每次更改时都重新启动循环 这在大数组上效率非常低
  • 替换打字稿中字符串中字符的所有实例?

    我正在尝试用 x 字符替换电子邮件中的所有句号 例如 电子邮件受保护 cdn cgi l email protection 将变为 myxemail emailxcom 电子邮件设置为字符串 我的问题是它不只是替换句号 而是替换每个字符 所
  • 在部分渲染时执行 JavaScript

    我有一些 JavaScript 代码 我想在用户单击其文件夹之一后执行 它会触发 show 操作和 show js erb 从而呈 现部分内容 Show js erb 当用户单击其文件夹之一时触发 如下所示 body append 它成功注
  • React TypeError:x 不是函数

    我在子组件中从父组件调用函数 booksRefresh 但出现错误 类型错误 booksRefresh 不是函数 我不知道为什么 因为 booksRefresh 是一个函数 有人可以帮我解释为什么会出现这个错误吗 这是我的代码 import
  • 如何在 JavaScript 中从代理对构造 UTF-16 字符?

    以下计算 Unicode 代码点的 UTF 16 代理对 戴着医用口罩的脸 https emojipedia org face with medical mask 但是如何从代理对构造字符以在字符串中使用呢 const codepoint
  • 需要根据用户选择有条件地渲染具有 X 行数的部分

    我有一个反应组件 其中包含一个下拉列表 其中的选项包括none 1 5 and 13 根据用户选择的数字 我需要渲染一个部分 其中包括许多行 每个行都有字段名称和下拉列表 如果用户不选择任何一个 我需要整个附加配置部分消失 新部分中的每个下
  • 如何修复带有单个道具的括号的 prettier 和 tslint 错误?

    我使用 prettier 和 tslint https github com alexjoverm tslint config prettier https github com alexjoverm tslint config prett
  • 通过ajax执行后期操作时如何克服CORS重定向问题?

    我可以通过外部登录表单中的 post 方法类型提交表单来登录 roundcube 实例 托管在另一台服务器上 我收到此错误 通过 ajax 签名时 XMLHttpRequest 无法加载https 192 168 0 7 mail http
  • 如何用时刻找到与给定时间最接近的时间?

    所以我有一个简单的代码 一个工作代码 它使用 moment 获取最接近给定时间的时间 Current time in millis const now moment 10 16 HH mm format x List of times co

随机推荐