2011-04-19 33 views
0

我即將寫一個需要在服務器上存儲一些文件的小應用程序/工具/小部件。爲了避免服務器端不必要的負載,我想在客戶端創建文件散列(使用SHA,MD5或其他...)。它可以用HTML5 FileAPI管理,但Opera和IE9用戶將被解僱。 JAVA或Flash applet可以用來代替HTML5的方式,以保持應用程序跨瀏覽器的兼容性。但是因爲我不熟悉JAVA/Flash(我只會在生活或死亡的情況下使用它們),所以如果可能的話,我想堅持使用JS。但所有的客戶端建議,歡迎... JS,JAVA,Flash,無論什麼...服務器端與客戶端文件哈希

傳統的POST方法(與PHP)將做的伎倆,無論用戶代理。而且AFAIK更安全。

長話短說,我的問題是:爲什麼我更喜歡客戶端而不是服務器端哈希?

你能否提供兩種方法的優點和缺點?

+1

意見:與客戶端做這件事情有關的痛苦和麻煩使我成爲一個完全不起動的人。我無法想象,無論如何要保存這些文件的服務器都會因積累一個簡單的哈希值而負擔過重。 – Pointy 2011-04-19 14:08:00

回答

2

服務器端 更多的負載,但沒有那麼多。編寫代碼,記下時間,測量內存使用情況等。我懷疑這將是一個巨大的問題,尤其是如果您可以通過cron工作來完成這項工作,以便將負載分散到巨大的環境中。

客戶端 你不能相信散列,並驗證它們需要你重新計算它們在服務器上。較少的服務器負載,但如果它需要一段時間來散列一個大文件,這將是令人討厭的用戶。

我會做它的服務器端,除非你有成千上萬的大文件每分鐘!

+1

這裏的關鍵是你不能相信來自客戶端的哈希。散列的全部要點是保證數據是正確的。做他們的客戶端否定這種好處。這裏的瓶頸將是將文件移動到服務器的帶寬 - 這兩種方法都是不變的。作爲一般規則,在遇到問題後優化*。請參閱ebay,youtube,meebo等,作爲該方法的示例。 – Milimetric 2011-04-19 14:19:04

2

我試圖寫一些專業人士在客戶端做這件事,但以我誠實的看法,你只會讓自己很難。你如何確保提交的哈希是由你生成的?任何人都可以輕鬆使用像Firebug這樣的工具,並更改正在運行的代碼(糾正我如果我對此錯誤,從未真正使用它:D)。此外,他們可以創建/僞造自己的請求並將其發佈到您的PHP文件中,因此您將失去很多控制權。

那麼如何檢查數據呢?生成另一個散列並相互檢查它們?但是,你已經在服務器端做了!

所以寧可考慮保持哈希操作服務器端,你控制環境。哈希算法已經存在多年了,所以我相信他們已經對它進行了很多優化。你會確保爲你的客戶提供更多的兼容性。

如果你得到足夠的流量即哈希是一個重大的性能損失那麼它也許時間升級到更大的東西...

但不要誤會我的意思,這是非常可能的,是有道理的 - http://www.movable-type.co.uk/scripts/sha1.html - 但我無法讓自己相信這個解決方案。

0

如果關閉JavaScript,該怎麼辦?如果你把它做在服務器端,你不必依賴JavaScript來完成你的工作。寧願使用額外的服務器資源,100%保證它將工作!