img标签为空的陷阱

把页面中的img标签的src设置为“”存在巨大的风险,不管是在html中写入php

 

<img src=”" />html

 

仍是在js中写入ajax

 

var img = new Image(); img.src = “”;编程

 

出现一次这样的标签会致使向你的服务器多作一次请求。img标签的src=""时,会引发浏览器再次访问"./"即当前目录,若是该目录下有default.aspx,index.aspx等IIS的默认文档,则默认文档会执行2次浏览器



    • 在IE中,这样作会请求一次当前页面所在的目录。如在http://playgoogle.com/demo/a.html 中出现这种空src的标签,会致使从新请求一次://playgoogle.com/demo/

 

    • 在Safari 和 Chrome中,将请求当前页面自己。

 

    • 在Firefox 3.5之前的版本中,有和Safari一样的问题,可是在3.5中修正了这个BUG。

 

    • 在Opera 中,不会作额外的请求。

 

在一个访问量不高的网站中,多一个这样的请求也无所谓(甚至可让你的网站浏览看上去翻番),但在一个千万级访问量甚至更高的WEB站点里,这样会致使你的服务器和带宽的成本显著增长。 另一个隐患是,从新请求某个页面可能会致使用户的一些信息被无心中修改,例如cookies,或者ajax操做。服务器


你永远不会写出这样的代码? cookie

我并不这么认为,不少时候这种状况在无心中出现,好比下面这段php代码:网站

<img src="$imageUrl" > google

你原计划是从服务器端读取这个src地址,可是因为某个缘由,这个地址还未设置,或者代码的BUG致使读取失败,就会出现空的src标签。url


其余的标签中的空src会不会致使这样的问题? 

好消息是,在IE中只有image标签有这个问题。坏消息是,在Chrome, Safari, 和 Firefox中<script src=""> 和<link href="">都会致使出现一个新的请求。


如何解决这个问题? 

能够从两方面着手,一是尽可能避免这种坏的编程方式,不要出现空的src标签。另外,能够从服务器端着手,在发现时这种无心义的请求时不要返回任何东西给客户端。

<?php 
    //Works for IE only when using path URLs and not file URLs 

    //get the referrer 
    $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; 

    //current URL (assuming HTTP and default port) 
    $url = "http://" . $_SERVER['HTTP_HOST']  . $_SERVER['REQUEST_URI']; 

    //make sure they're not the same 
    if ($referrer == $url){ 
        exit; 
    } 
?> 

原文网址:

 

Empty image src can destroy your site

相关文章
相关标签/搜索