前端的表單驗證還有必要嗎?
不管怎樣,後台都要再驗證一遍的。前端驗證過了,你後台能取消驗證環節不?
籠統的說有必要,前端校驗規則是後端的子集。 @孟禿 概括的很對,前端校驗是為了體驗,也就是儘可能降低出錯率,提高一次性提交的成功率。不僅要校驗,還要有各種的友好的提示。
- 必須後端校驗的:唯一性驗證、驗證碼、敏感詞。出錯概率高的要做非同步校驗
- 有必要在前端校驗的:必填項、(郵箱、電話號、地址)格式、密碼強度檢測
- 非必要校驗:現在幾乎沒有「確認密碼」這項了。原則上犯錯成本不高的都可以是非必要的,過於嚴格會影響體驗
------ 更新配圖: 有人比喻這像客戶端校驗,哈哈 -----
我國著名地質學家李四光,原名是李仲揆。他14歲時從鄉下到省城武昌報考官辦的高等小學堂。由於心情緊張,在填寫報名登記表時,誤將姓名欄當成年齡欄寫了「十四」兩個字,他發現填錯後,急中生智,把「十」字加上幾筆改成「李」字,可是「李四」這個名字不好聽,也沒有多大意義,正在為難之際,抬頭看見中堂掛著一塊匾額:「光被四表」,於是靈機一動,在「李四」後面加個「光」字,這就改成「李四光」了。從此,李仲揆變成了李四光,真是有志者事竟成,後來李四光的事業成就果然是光芒四射。
這個故事告訴了我們,前端做一下校驗還是有必要的。
很多人家裡有兩道門,一個是外面的防盜門,一個是裡面的裝飾木門,這樣從屋裡看也會很漂亮,同時又很安全。後端校驗和前端校驗也是分管了安全和體驗。
那如果沒有前端校驗,是不是前端就可以節約很多工作量了呢?好像不檢查就交了作業,如果出了錯誤,還是要被老師送回來重寫,所以與其等老師讓你重寫,不如你自己檢查好再交給老師,省得反覆提交。
所以說,從安全的角度來看,確實不那麼必要。但是從體驗的方面來看,的確是大大提升了體驗。
前後都需要獨立驗證。後端驗證是為了保證安全,前端驗證是為了讓用戶快速得到結果,避免煩躁心理。
前端驗證防用戶手抖,便於用戶糾正(而且省流量),主要是對用戶友好。
後端驗證主要是防惡意亂搞。
- 後端驗證是防止介面被私自調用導致破壞資料庫結構,如果後端不驗證,相當於資料庫就裸奔了。
- 前端驗證可以提升用戶體驗(反饋快),減少伺服器壓力(減少無意義的請求)。
- 建議系統地來思考開發的模式和方法,前端工程師和後端工程師相互「理解」,別拘泥在自己的圈子。
就拿設定密碼這事舉例,比如網站要求密碼必須包含數字、字母和特殊字元,如果只做後端驗證,用戶就很容易有挫敗感,很多用戶都沒心情仔細看網頁上的說明的,寫上最喜歡的密碼123456或者自己的生日數字就發送了,然後後端驗證不通過,bang!失敗,用戶於是只好重新來,這種體驗......雖然安全,但是並不是最好。
如果加上前段驗證,用戶只輸入123456的時候,就可以在密碼框下面動態顯示密碼不夠安全,還缺啥啥啥,這樣用戶容易知道自己該做的啥,再點擊發送按鈕前就讓密碼符合規則的概率大,而且體驗也好很多。
那要不只要前端驗證不要後端驗證?當然也不行,對於這個設定密碼密碼問題還好,很多其他問題後端驗證必不可可少,因為「壞人」是可以模擬瀏覽器行為直接給伺服器發請求的。當然有。。。
前端驗證有如下幾個好處:
1 可以不等後端返回,直接提醒客戶輸入不合法。這樣省時,也不會涉及頁面刷新的不良感受。2 某些需要後端返回的驗證,也可以用非同步請求完成。但是表現方式還是在前端,例如:非同步查詢該用戶名是否被佔用。3 可以制定跟後端驗證規則不一樣的規則。舉例:如果你們做了一套後端介面,一方面提供給客戶介面調用,一方面提供給網站前端來調用(客戶從網頁是入口)。如果你認為網頁來的都是小白客戶,那麼可以約束他的使用方式,制定比介面調用更嚴格的驗證。
前端表單驗證也有一個顯而易見的壞處:
前端工程師抱怨工作量啊!就跟測試一樣,有了單元測試,後面還得IT、ST。表單驗證前端需要處理,後端更是不可忽視。
像「密碼太弱」、「兩次輸入的密碼不一致」、「用戶名不合法」、「XXX欄位不能為空」等等,前端先驗證一把,能夠讓用戶馬上知曉並更改,不用等到服務端驗證不通過了再回頭通知你浪費等待時間。
如果說前端驗證是讓體驗更爽,那服務端驗證則是安全方面/規則方面的實打實應對了,意思就是「不管你前端怎麼玩兒,都得按我的規則辦事」。比如註冊用戶名/郵箱重複。
JS發明之初就是為了解決前端驗證問題的,Google提出AJAX更是讓體驗更進一步了。
我們學校教務系統只做了前端驗證,用選課系統舉例子,課程編號和學生編號都是 form 中的 hidden 欄位,了解了這些欄位的作用之後可以輕易的繞過前端認證,從而實現給別人選課(及退選),因為後端壓根不會根據 session 中的 user 去比對選課對象。
然而這麼多年了,依然沒有出現大面積或影響惡劣的學生選課被破壞的情況。這就能說明,前端驗證做得好能擋住 90% 以上的用戶,即便後端不做驗證都不會有太大的問題。但是後端驗證我認為是絕對不能省去的,就像 QQ 個人信息能改成無性別一樣,你永遠不知道自己會遇到什麼用戶。
前端不需要專門的驗證,直接提交上去交給服務端驗證就可以了,前端保證正確的處理服務端返回的錯誤信息就可以了。比如是哪個表單項出錯了,出錯的原因是什麼。
當年前端要做專門的驗證是因為網路請求很慢,成本很高。現在這個已經不是問題了。當然如果你認為你的用戶在使用的系統的時候網路很慢,成本很高,那就在前端做一下。
我們看看 & 算不算前端驗證
並且你這種想法會讓後端想打人,所有 form 驗證交給後端並且要求後端返回錯誤信息的話,前端改了一點,後端也要改一點前端校驗是為了體驗,
後端校驗是為了安全。
缺一不可
肯定有必要啊,不然用戶辛辛苦苦填個表單然後保存,還得等後端返回表單格式錯誤?如果是這種方式,自己問問自己想不想用
知道為啥都刷卡進門了還要留個前台妹子么?
必要性來說的確是沒有。
但前端就是ux/ui設計,不然公開個api 就好了。
說到介面設計,所有準則都可以自己判斷一下,用不用總將訪客當獃子,就看你的目標訪客了。
網頁的體驗不能總想著訪客,開發者的體驗也是體驗。用某部分獃子的時間去節省開發者的時間,有很多時候都是個不錯的選擇。當然有必要。
後端驗證是為了安全。前端驗證是為了用戶體驗。
以及減少伺服器壓力。用戶通過前端校驗能夠立刻知道自己哪裡出了問題。而不用等到伺服器響應。樓上已經說的很好了。
前端的驗證只是為了用戶體驗而做的,後端的校驗才是真的校驗,為了系統的安全做的。
前端的驗證主要是為了 UE,如果懶得管確實可以只在後端做一次就好
肯定不行啊!前端後端互不信任!
推薦閱讀:
※如何用計算機程序驗證E=mc^2?
※電腦一點不會的傢伙怎麼學編程?看什麼書?
※C++ 是否能夠定義引用的引用?
TAG:前端開發 | JavaScript | PHP | Java | 計算機科學 |