把頁面中的img,script,link等標簽為空鏈可以導致頁面多余請求的問題,包括IE,Firefox,chrome,Safari!但是相對于img,script跟link的src、href為空時,在IE下不做請求,而Chrome, Safari, 和 Firefox則會出現一次多余的新請求。下面詳細講解一下:
img src為空的情況分析
無論是在html中寫入<img src='' />還是在js中通過Image對象建立var img = new Image(); img.src = "";,都會導致向你的服務器多做一次請求。而具體請求的情況分析如下:
在IE中,這樣做會請求一次當前頁面所在的目錄。如在http://js8.in/demo/a.html 中出現這種空src的標簽,會導致重新請求一次:http://js8.in/demo/
在Safari 和 Chrome中,將請求當前頁面本身。
在Firefox 3.5以前的版本中,有和Safari同樣的問題,但是在3.5中修正了這個BUG。
在Opera 中,不會做額外的請求。
在一個訪問量不高的網站中,多一個這樣的請求也無所謂(甚至可以讓你的網站瀏覽看上去翻番),但在一個千萬級訪問量甚至更高的WEB站點里,這樣會導致你的服務器和帶寬的成本顯著增加。 另外一個隱患是,重新請求某個頁面可能會導致用戶的一些信息被無意中修改,例如cookies,或者ajax操作。
你永遠不會寫出這樣的代碼?
我并不這么認為,很多時候這種情況在無意中出現,比如下面這段php代碼:
<img src="$imageUrl" alt="" />
你原計劃是從服務器端讀取這個src地址,但是由于某個原因,這個地址還未設置,或者代碼的BUG導致讀取失敗,就會出現空的src標簽。
其他的標簽中的空src會不會導致這樣的問題?
好消息是,在IE中只有image標簽有這個問題。
壞消息是,在Chrome, Safari, 和 Firefox中<script src=""> 和<link href="">都會導致出現一個新的請求。
如何解決這個問題?
可以從兩方面著手,一是盡量避免這種壞的編程方式,不要出現空的src標簽。另外,可以從服務器端著手,在發現時這種無意義的請求時不要返回任何東西給客戶端。
<?php
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
if ($referrer == $url){
exit;
}
?>
原文鏈接:http://www.js8.in/555.html