前後端的界線
現在的技術興next是有種frontend backend混合模糊化的做法。
但我理解的是, 這做法只是把一些frontend的部份東西混在backend, 目的往往是加速性能。
但人們卻不會把backend的東西擺在frontend做的; 而就算有, 也是有界限。
還原根本, 什麼是frontend什麼是backend? server就是backend?
我的定義是, 在界線背後很高可靠性地保護著安全logic的就是backend, 在界線前相對沒那麼高可靠保護性的就是frontend。
我們看的網頁, 你F12打開developer console, 就能改html, js能人手改state, 你能call ajax/API。cross domain是browser能擋住你, 但你弄個proxy也許有時就能用假的繞過去...... 甚至你postman就能任call, 又何經browser?
總之, 就是五花百門各種方法能篡改, 這就是frontend。
但去到backend, 就是你在client side無法篡改的地方了。
說到這也要講下, frontend又是否完全沒安全性可言?
不, 強制要https, 限制cross domain等很多browser層面做了的安全限制, 還是存在。但它們的安全性保護, 往往是容許你就算能在frontend篡改, 但令你的篡改也往往是單機自high而無法影響到其他人。
而backend的保護, 往往是在保護著business logic。例如你有state要寫到DB, 那麼state是否正確可信, 在frontend的一切檢查都只是「信住先」, 到backend也才會做把關守尾門。
最後再講講, web3的話, 人們在網頁直接call blockchain的RPC endpoint與blockchain smart contract互動, 那又是怎樣理解?
網頁frontend還是frontend, 而我認為blockchain上smart contract, 其實某程度上算是backend。當transaction提交上去, 上面會有client side不能中途干預的logic運行驗證update state, 那顯然是一種backend; 只是, 那是一種很透明化的backend。