刚学习 HTTP 的程序员有这种想法很正常,但是很多人也解释不清楚这个问题,为什么 HTTP 协议不一开始就设计成有状态 /带认证的特性?其实并不是楼主所说的「是一种先天狭隘考虑不周的表现」,恰恰相反,HTTP 协议有些功能是过度设计、考虑太多的结果! HTTP 协议本身有身份验证功能,但因为缺乏可扩展性现在几乎没有网站使用:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication类似的,IPv6 报头也有比 IPv4 报头简单的地方,你只看到了 IPv6 多出来的特性,却没看到删减去的特性。如果你在一开始就过度设计,添加太多使用频率很低的功能,那就会使协议过于复杂,更加缺乏可扩展性,更加不能适应时代的变化。基于 Cookie 的身份验证方法可以很好地适应各种网站各种不同的需求,而且用处也不仅仅是身份认证 ,你却没有看到它的优点。你应该再看看网络洋葱结构图,理解一下「软件设计的正交性」,让你来设计一个检查用户输入是否合法的框架,你是设计成 checkInput(userInput:String,validators:[UserInput -> Bool])?让 Validator 可以是传入一个可扩展的检查函数参数?还是设计成 checkInput(userInput:String,validators:[StringValidatorName]), 让 checkInput 方法内置一堆预定义的校验方法,只允许传入指定 Validator 的名称?