我有一个perl脚本,可以将字符串转换为不同的编码,例如base64,ASCII或hex(双向)。现在我正在为它写一个ajax前端,我的问题是;如果我想自动检测提交的字符串的编码,在将其发送到服务器之前对使用javascript提交的字符串执行正则表达式搜索更有效,还是更快将它留给perl脚本来计算出什么类型的字符串?
为了澄清,我问这两个中哪一个更好:
或
是否应该执行此类处理的特定经验法则,您认为哪种更好(意味着更快)的实施?
答案 0 :(得分:3)
您必须验证服务器上的数据。期。一旦两位想要“黑客”通过一个base64字符串和一个声称你的javascript认为它是十六进制的标签,你就会驶入未知的水域。
鉴于此,您是否希望还检测客户端的编码。这有一些潜在的好处,因为如果它以无效的方式编码,或者告诉用户检测到了什么编码,并允许它们纠正它,如果它是一个不明确的情况(例如,十六进制),它允许你根本不发送数据到服务器数字是base64字符集的子集,因此任何十六进制字符串都可能是base64)。请记住,如果客户端将编码传递给服务器,服务器必须仍然检查收到的编码说明符,并准备忽略它(或完全拒绝请求),如果它不合适对于相应的数据。
答案 1 :(得分:0)
这取决于规模。
如果有很多客户端请求执行此操作,那么在客户端(例如在Ajax调用之前的JS中)执行此操作肯定“更快”,因为将其放在服务器端会导致服务器处理所有这些请求都会争夺服务器的CPU资源,而客户端则只会对每个客户端进行一次检测。
如果您只预计很少的并发请求,那么在Perl中执行它可能会稍微快一些,因为Perl的正则表达式实现可能比JavaScript更好/更快(尽管我没有任何统计数据来支持它),并且可能是服务器有更好的CPU。
但我真的不认为服务器端边缘会非常大,因为整个处理不应该在任何一方花费那么长时间,所以我建议自那以后进行客户端检查(根据第一段)更好地扩展。
如果两者之间的性能差异对您很重要,那么您应该在平均预期和最大预计客户端负载下实现两者和基准。