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).
如果出现错误并且没有人知道它在哪里,则必须调试代码以查找可能是错误启动器的语句.如今我们有一些很好的工具可以帮助我们完成这项任务.
如果使用JavaScript来设置或更改图像位置,则有时会发生undefined进入URI的情况.
将是一些javascript发出http请求,由于一个错误,而不是请求一个绝对网址,它正在请求"未定义".
结论:这个问题,我相信是由JS引起的.
安装和运行
如果您将尝试使用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.对于故障排除刷新页面并重做该部分.
还是看不到它
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可能是一个对象{},一个数组[]或任何内部浏览器类型.关键是将访问不存在的属性.
结论:这里没有免费的午餐可以知道究竟发生了什么.但是,使用调试方法,您应该能够发现,接近或理解问题.
基于这篇文章,我对“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。所以,应该认真对待。
| 归档时间: |
|
| 查看次数: |
4591 次 |
| 最近记录: |