通常寫一個web應用程序時,我們要在兩個客戶端執行驗證提供即時反饋,並在服務器端,以確保數據的完整性和安全性。但是,客戶端瀏覽器應用程序通常使用JavaScript編寫。服務器端可以用Java,Php,Ruby,Python和其他許多語言編寫。當服務器端支持像node.js這樣的東西時,在客戶端和服務器上重複使用相同的驗證代碼非常容易,但是如果服務器端基於Rails或Django(或者其他任何可以命名的框架),確保驗證代碼保持同步的最佳方式是什麼?必須用多種語言重新實現相同的代碼似乎有點多餘。如何在客戶端驗證和服務器端驗證同步?
4
A
回答
2
如果你記住以下persepective,它可能看起來還好複製某些驗證。
讓我們打破驗證分爲兩個部分。 A)業務驗證,例如「如果複選框Y被選中,則字段X中的金額應該大於500美元」 B)基本數據驗證例如數據類型檢查,空值檢查等(我們可能會辯論每個驗證都是業務驗證,但這純粹是與上下文相關的)。
A類:它是您業務邏輯的一部分,應該只保留在服務器端。
B類:此類型的驗證可能會被放置在客戶端。但請記住,瀏覽器端驗證can be bypassed。這並不意味着你不應該在瀏覽器端進行驗證,但是這樣的驗證應該僅僅被看作是從服務器節省網絡往返的獎勵。服務器必須重新執行這些驗證。
在概括地說,驗證不應該被認爲是跨層可重用代碼單元。他們的目標不一,應該允許冗餘。
希望這會有所幫助。
0
從項目中,我見過有三大戰略:
完全重複的客戶端和服務器端驗證。在javascript前端和java/c#/ ruby後端的情況下,這將需要兩個不同的代碼庫。您必須手動保持兩者的邏輯同步。
做最小的客戶端驗證。只檢查非常基本的東西。讓服務器端進行完整驗證。讓服務器端將某種驗證錯誤對象傳遞給客戶端,並讓客戶端邏輯將其轉換爲UI消息(錯誤消息,紅色邊框等)。 Asp.net MVC框架大致就是這個模型的一個例子。
使用Ajax進行驗證調用到您的服務器端,當用戶改變或離開每個控制。這可以允許您在服務器端進行所有驗證,並且會減少用戶的反饋等待時間,但可以極大地增加客戶端到服務器端的流量。
以我的經驗,選擇1通常比保持選項2和3
相關問題
- 1. 如何維護服務器端驗證和客戶端驗證
- 2. 客戶端和服務器端驗證
- 3. ASP.NET:同步客戶端和服務器端驗證規則
- 4. 客戶端驗證和服務器端驗證
- 5. 客戶端和服務器端驗證的驗證摘要
- 6. 如何同時觸發客戶端和服務器端驗證?
- 7. 服務器端/客戶端驗證.net
- 8. 如何繞過ASP.NET客戶端驗證來驗證服務器端驗證
- 9. 客戶端和服務器驗證
- 10. 骨幹:部分客戶端驗證+服務器端驗證
- 11. 規則:客戶端驗證與服務器端驗證?
- 12. 平衡asp.net服務器端驗證與客戶端jQuery驗證
- 13. 如何驗證服務器端和客戶端的按鈕?
- 14. 如何應用客戶端和服務器端驗證
- 15. asp.net驗證客戶端或客戶端或服務器端
- 16. 服務器客戶端消息驗證
- 17. 服務器客戶端身份驗證
- 18. 驗證客戶端與服務器
- 19. Html.beginform驗證服務器端和客戶端端
- 20. 確保服務器端和客戶端之間的驗證邏輯同步
- 21. ASP.NET自定義驗證程序客戶端和服務器端驗證
- 22. 客戶端驗證與Angularjs和服務器端驗證與Asp.net MVC
- 23. 客戶端和服務器端(JavaScript和PHP驗證)
- 24. 服務器端的客戶端證書驗證DEPTH_ZERO_SELF_SIGNED_CERT錯誤
- 25. 如何驗證客戶端以及服務器端的recaptcha
- 26. 如何驗證服務器上的客戶端證書?
- 27. 如何使用jQuery Tools進行服務器驗證和客戶端驗證?
- 28. 使用RESTful API進行客戶端和服務器端驗證
- 29. 服務器端和客戶端驗證可能
- 30. 表單客戶端和服務器端驗證問題
問題所需的額外代碼和複雜性更低的痛點的是「什麼是保持客戶端的最佳方式和服務器端驗證同步「。你回答了一個不同的問題,涉及到何處放置業務邏輯(又名業務驗證)。 – RMuesi 2017-08-17 01:09:46