我们有一个绝对需要 JavaScript 才能运行的表单,并且验证是在客户端完成的。验证也在服务器端执行,但是当服务器端验证失败时让它显示错误将是一项极端的工作。
既然用户没有机会没有 JavaScript,那么是否可以只因 HTTP 错误而失败?他们无法通过服务器端验证的唯一方法是他们要么是恶意用户,要么不能使用 JavaScript,在这种情况下,他们无论如何都不会使用表单。
谢谢
我们有一个绝对需要 JavaScript 才能运行的表单,并且验证是在客户端完成的。验证也在服务器端执行,但是当服务器端验证失败时让它显示错误将是一项极端的工作。
既然用户没有机会没有 JavaScript,那么是否可以只因 HTTP 错误而失败?他们无法通过服务器端验证的唯一方法是他们要么是恶意用户,要么不能使用 JavaScript,在这种情况下,他们无论如何都不会使用表单。
谢谢
我说这很好,除了某些类别的错误。
一些验证错误不是恶意的结果,而只是在实际处理表单时无法检查和发现。这可能是因为需要保留但不能保留的稀缺资源(“此用户名已在使用中”),或者由于某些服务器端可恢复错误(“上游信用卡处理器没有响应。请重试之后”)。对于这些类型的错误,您绝对应该将某种错误消息传达给用户。很难想象一种设计不可能将这些类型的错误发回。至少你可以这样做:
然而,最重要的是要有服务器端验证而不信任客户端。你已经在这样做了,所以如果你想进一步做任何事情,那就是润色和创造最佳用户体验的问题。有时这需要不成比例的努力,这没关系。
我个人认为还不错。
特别是如果在没有 Javascript 的情况下使用该网站的前一步也根本无法工作,因此用户在没有 Javascript 的情况下无法继续访问相关页面,那么在没有 Javascript 的情况下使其工作的巨额费用是浪费精力。例如,在 .Net 网络表单中,登录需要 Javascript,因此在我看来,网站安全区域内的任何页面都可以假定 Javascript 可用。
不过,我很好奇其他人的想法。
如果 HTTP 请求失败的唯一预期用例是当有人绕过浏览器时,那么 HTTP 请求失败似乎完全没问题。您不会影响任何预期的用户场景,但您仍然通过服务器端验证来保护服务器端的完整性。做更多的工作没有意义。对我来说似乎很好。
值得做更多工作来显示来自服务器的错误 UI 的原因是,如果存在错误数据会通过服务器的实际合法用户场景。但是,既然您认为合法场景不太可能或不可能到达那里,那么没有理由做这些额外的工作。
只要您确定客户端验证和服务器端验证是等效的,就可以了。关于这一点,我发现让客户端验证代码和服务器端验证代码保持同步有些麻烦(特别是如果它们是用不同的语言编写的,如果你不使用 node.js 或 GWt,情况总是如此)。如果有人有任何解决方案,那就太好了。
但是,如果某些验证只能在服务器端执行(例如数据库唯一性约束),那么向用户显示他们的客户端操作失败是很重要的。不过,这取决于应用程序本身。