我們需要在頁面中顯示〜40個圖像,並且不允許用戶熱鏈接這些圖像。我們目前正在使用<img src="...">
,它指向一個處理程序,該程序檢查cgi.http_referer
並使用cfcontent
顯示圖像。但是,某些圖像將無法加載(40個圖像中有6個圖像),如果刷新頁面,其他圖像將無法加載。顯示圖像並且不允許熱鏈接
當我必須顯示超過10張圖像時,纔會出現此問題。我想這是因爲我使用cfcontent
?如果是這樣,我應該用什麼來代替?
我們需要在頁面中顯示〜40個圖像,並且不允許用戶熱鏈接這些圖像。我們目前正在使用<img src="...">
,它指向一個處理程序,該程序檢查cgi.http_referer
並使用cfcontent
顯示圖像。但是,某些圖像將無法加載(40個圖像中有6個圖像),如果刷新頁面,其他圖像將無法加載。顯示圖像並且不允許熱鏈接
當我必須顯示超過10張圖像時,纔會出現此問題。我想這是因爲我使用cfcontent
?如果是這樣,我應該用什麼來代替?
要準確找出這些圖像失敗的原因,您需要做更多的工作。您應該在FireFox中使用類似Firebug的東西,或者在Safari或Chrome中使用控制檯,以查明發生故障的請求的情況。您還可以使用類似於Fiddler on Windows for IE或Charles on the Mac, Windows, or Linux的內容來查看後臺發生的完整HTTP請求以及來自ColdFusion應用服務器的完整返回值。在你確切知道他們失敗的原因之前,我們不能提出任何解決方案。
另一件需要記住的事情是,如果你通過ColdFusion來做到這一點,那麼對於每一次頁面加載,你都會向你的CF服務器發出40多個請求。因此,一個頁面會導致41個點擊到您的CF服務器進行處理。確保代碼儘可能緊密。
如果我要走這條路,我會在服務器級(IIS或Apache)使用某種服務器級別的過濾器來防止盜鏈。但請記住,總會有解決辦法。
在Chrome的開發人員工具,它提醒我我的消失的圖像是「資源解釋爲圖像,但使用MIME類型text/html傳輸」。即使我將cfcontent的類型硬編碼爲image/jpeg,它仍然告訴我它們是text/html –
這告訴我在這些請求期間可能會發生錯誤。我的建議是安裝Charles,運行你的文件,然後在Charles中查看會話結果,並查看服務器對那些失敗請求的原始響應。我猜這些頁面上有一個CF錯誤,這就是爲什麼你的返回將是'text/html'而不是'image/jpeg'。 –
我無法以某種方式安裝Charles,但是我確實安裝了Fiddler,消失的圖像有一個錯誤消息「Element VIEWPATH未定義在作爲表達式的一部分引用的CFML結構中」。這似乎來自Coldbox。無論如何,我嘗試繞過Coldbox並用'cfcontent'調用cfm,它似乎正在工作。 –
只是讓我想起了http://www.bennadel.com/blog/2170-Streaming-Secure-Files-Efficiently-With-ColdFusion-And-MOD-XSendFile.htm – Henry
我和亨利在一起,在Web服務器級別上,這比ColdFusion級別更好解決。但即使如此,如果人們想要這些圖像,他們會得到它們。更多本Nadel救援:) http://www.bennadel.com/blog/314-ColdFusion-CGI-Variables-Hot-Linking-And-Poor-Documentation.htm –