空 image src 属性导致的问题
12月 1st, 2009 — Dreamer今天看到 Zakas 写的一篇文章 “Empty image src can destroy your site” ,想到之前做项目的时候遇到过这个问题,当时出现了一个怪异的BUG:当刷新页面的时候,页面上的一个数值会增加,但实际上它应该是在触发了一些逻辑之后才增加。查了好长时间才发现,原来是因为页面中一个 img 标签的 src 属性设置成了空,导致间接请求了另外一个触发逻辑的页面。
img 标签为空有两种情况,一种是基本的HTML:
<img alt="" />
另外一种是在 JavaScript 里面:
var img = new Image(); img.src = "";
这样的代码会导致一些额外的请求:
在 IE 下会自动请求当前页面所在的路径,如果在 http://www.example.com/dir/foo.html 中由一个 img 标签的 src 为空的话,会自动请求一次 http://www.example.com/dir/ 。
在Firefox, Safari 和 Chrome 下会自动请求当前页面本身。
这些额外的请求会引发什么问题呢? 首先就是可能触发一些意向不到的逻辑,而且这种BUG很难调试。另外,由于增加了对页面的请求,也增加了对服务器资源的消耗。
那么是什么原因导致会出现这样的问题呢?根据 RFC3986 中的定义,当一个URI 是空字符串的时候,它会被当做一个相对路径并根据一定的算法去请求资源,在这里也给出了一些例子。 Firefox, Safari 和 Chrome 都是遵循了这个标准的,但是 IE 是个例外(又是 IE !),它遵循的是一个已经废弃的标准 RFC2396 。
更多关于这个问题的研究请看 Zakas 的那篇文章,这里不再赘述。
Update: Firefox 3.5 已经修复了这个问题,请点击这里查看
BTW,真的很佩服国外技术人员的那种钻研精神,从一个小问题入手可以追溯到各个浏览器之间的差异以及 RFC 。相比之下,国内多少技术是自己钻研得来的呢? 很多知名的 blog 也不过是转载研究国外技术人员的研究成果比较多罢了,再加上几句自己的“点评”就显得很牛逼了。以后还是多学习,少装逼。
本文链接:http://www.zhuoqun.net/html/y2009/1417.html 转载请注明出处。TrackBack:http://www.zhuoqun.net/html/y2009/1417.html/trackback











我觉得楼主的“BTW”说的很诚恳,切中了国人的痛楚。个人觉得在前端开发人应该少一些空无飘渺的高调,多一些脚踏实地的专研才是根本的驱动力,夯实了基础才能有创新。
[...] From: Dreamer [...]
也碰到类似的问题.
BTW那段不错,哎,遇到问题都先是Google, 惭愧,惭愧.
确实,应该多学习,少装逼…
IE下确实有这个问题,不过我用Firefox3.5.5+Fiddler试了一下,发现没有产生两次请求啊,所以非常奇怪。仁兄在Firefox下测试的结果怎么样啊?莫非FF3.5已经修订了这个问题?
好像确实是修复了这个问题。我更新一下,多谢提醒。
今天也碰到了这个问题。呵呵。。不过不是img。。
早前看到了Zakas 的那篇文章,苦于En文能力有限,没有多大理解,BZ解释的不错,举拇指!!
编了两年程序,转了。现在回过头来看这些问题,还是蛮有意思。学习。