2013-06-24 71 views
4

爲了減少我們網站上的請求數量,我們使用CSS數據URI而不是鏈接到外部圖像。出於某種原因,這些數據URI偶爾仍然會被記錄爲對我們的服務器的404請求。爲什麼會發生這種情況?爲什麼會將CSS數據URI記錄爲404請求?

隨機細節:

相關CSS:

body{background:#e2decd url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGuCAIAAADeSvtRAAAAfUlEQVQ4y9WTzQ7AIAiD+fr+rzzYSeOWGP+z7MABwVJstYiQmf02zvP3yrk2442Gqvijb9LT34tJ7vVP5u/zTBzDP113n/eYCv3ec1IOLGjn1bu9+K0zQEad/4r/iMj8dvLfVqetfcsf5X6z/y7ieuVk/SU19wMesxMXQMANapSO6rYFQnIAAAAASUVORK5CYII=) repeat-x 0 0} 

查詢以查看我們所有的404錯誤(在前10個404錯誤中有5個數據URI):

生成下面的圖片

查詢:

sourcetype=iis* host=prd*ssscdn* sc_status=404 cs_uri_stem="/lib/tgn/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGuCAIAAADeSvtRAAAAfUlEQVQ4y9WTzQ7AIAiD+fr+rzzYSeOWGP+z7MABwVJstYiQmf02zvP3yrk2442Gqvijb9LT34tJ7vVP5u/zTBzDP113n/eYCv3ec1IOLGjn1bu9+K0zQEad/4r/iMj8dvLfVqetfcsf5X6z/y7ieuVk/SU19wMesxMXQMANapSO6rYFQnIAAAAASUVORK5CYII=" 

任何幫助/方向都將不勝感激!


alt text http://www.jasonbuckboyer.com/playground/blah/data-uri-404-error1.png

+0

不會數據uri從數據開始:而不是lib /? –

+0

如果它與url-rewriting有關,你應該過濾它不要重寫,無論是在服務器或Splunk配置(我不知道如何設置)。聽起來很明顯,我猜:) –

+0

我的一個客戶端也在非IIS服務器上看到這個。他們以/ lib/tgn /開頭的原因是因爲這是CSS文件的相對路徑;他是否(?)將CSS放入其根目錄中,數據URI請求會顯示爲/ data:image/png [...] –

回答

0

我與SRIKANTH提出的意見達成某種協議。它看起來像你在你的代碼中有一些東西是/lib/tgn/url字符串的前面,它最終將它放在data之前以產生/lib/tgn/data:image/png,這是無效的。

您需要跟蹤該代碼,並讓它忽略字符串,如果它是數據URI,同時仍允許它將圖像路徑附加到在/lib/tgn/目錄中保存和訪問的圖像。

加說明

基於把你的評論,我不知道我們是很清楚的溝通。我在「生成下面的圖片查詢」你上面貼的代碼看是這樣的:

cs_uri_stem="/lib/tgn/data:image/png;base64,iVBORw0KGgo... [etc.]" 

而且您發佈的圖片顯示了cs_uri_stem值均具有/lib/tgn/data:image/png之前插入。東西(也許你的CDN組合,也許你的服務器上的URL重寫規則,或其他)似乎是導致/lib/tgn/代碼被添加到css url()代碼進程/請求時間(因爲它似乎是沒有被添加到直接到CSS既不縮小也不擴展的代碼顯示它添加)。但最終結果是您的發佈圖片顯示cs_uri_stem導致404錯誤全部在data:image/png之前添加/lib/tgn/。因此,瀏覽器結束了,因爲請求開始與路徑,即/lib/tgn/data:image/png ...沒有治療url()數據。既然它認爲它正在尋找一個從路徑/lib/tgn/開始的文件,那麼瀏覽器發出一個請求(當然)它永遠不會被執行,從而產生一個404錯誤。

現在也許我對你在評論中提到的內容仍不清楚,但也許我已經讓自己更清楚自己的問題是什麼。

+0

我們的CDN會自動組合和縮小文件。當它通過我們的組合器,我們去http://c.mfcreative.com/lib/tgn/combo.ashx?names-of-all-our-css-files。我已經更新了上面的網址,以便在我們的生產環境中如何使用這些網址。對不起,最初應該做到這一點。 – Buck

+0

我不太確定我們是否正在溝通相同的事情。我在答覆中加了進一步的解釋,但我可能仍然誤解了你想在你的評論中澄清的一些內容。 – ScottS

+1

在你最初的答案中,我以爲你的意思是說'/ lib/tgn /'被添加到實際的CSS文件中,而不是。我認爲它與服務器端重寫規則沒有任何關係,因爲它的行爲與其他相對包含的圖像一樣。但更大的問題是爲什麼它會作爲服務器端請求處理。這就像瀏覽器不認識'data:image/png; base64,iVBORw0 ...'作爲有效的數據URI,所以它向服務器發出請求... – Buck

相關問題