什麼情況下會返回304狀態碼
客戶端是怎么知道這些內容沒有更新的呢?其實這並不是客戶端的事情,而是你伺服器的事情,大家都知道伺服器可以設定快取機制,這個功能是為了提高網站的訪問速度,當你發出一個GET請求的時候伺服器會從快取中調用你要訪問的內容,這個時候伺服器就可以判斷這個頁面是不是更新過了,如果未更新過那么他會給你返回一個304狀態碼。
例如:一些搜尋引擎是如何知道我們的網站是否有更新。判斷網頁是否發生變化最直接的方法是設定頁面的某一處為監控區域,每次都抓取該部分區域的內容,然後與本地保存的或最 近一次抓取內容比較,如果有差異就表明網頁發生了變化,才可以進行解析。這種方法比較穩妥,幾乎可達到萬無一失的效果。但是,這種方式在每次掃描時都要下載頁面內容,並且要去截取監控區域的內容,最後還要進行字元串比較,整個過程比較耗時。其實在眾多網頁中,有一部分網站的網頁內容是靜態頁面,如圖片,html,js等,這些靜態頁面往往可能是伺服器早已準備好的,用戶訪問時僅僅是下載而已。那么針對這種靜態頁面,就可以僅僅通過304狀態碼來判斷,內容是否發生了變化。
如何從網站日誌中分析304狀態碼
例如某網站日誌中有以下這樣的一段:
2011-12-18 23:45:33 W3SVC7499849XX 61.145.116.XX GET /asyj/1112_5544.html - 80 - 123.125.71.78 Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://***.baidu.coX/search/spider.html ) 304 0 0
其實這段文字是這樣理解的。
2011-12-18 23:45:33 ——代表訪問的日期和時間。
W3SVC7499849XX ——代表虛擬主機的名稱
61.145.116.XX ——代表訪問ip
GET ——代表訪問的方法
/asyj/1112_5544.html——代表具體訪問的檔案
80 ——代表訪問的連線埠
123.125.71.78 ——代表來源ip
Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://***.baidu.coX/search/spider.html) ——代表訪問來源;這裡是代表百度蜘蛛。注*換為w
304 ——304返回碼。這個也是這裡介紹的重點。這裡表示客戶端已經執行了GET,但檔案未變化
前一個0 ——代表服務端傳送到客戶端的位元組大小
後一個0 ——代表客戶端傳送到服務端的位元組大小
從這一段日誌。我們可以看出這次百度蜘蛛訪問的結果的返回了一個304狀態碼。那么搜尋引擎就不會對我們的頁面進行再次抓取了
304狀態碼的意義所在
如果一個網站被搜尋引擎抓取的次數以及頻率越多那么他是越有利於排名的,但是如果你的網站出現太多的304,那么一定會降低搜尋引擎的抓取頻率以及次數,從而讓自己的網站排名比別人落一步