0

我有一个 perl 脚本,可以将字符串转换为不同的编码,如 base64、ASCII 或十六进制(两种方式)。现在我正在为它编写 ajax 前端,我的问题是;如果我想自动检测提交的字符串的编码,在我将它发送到服务器之前对使用 javascript 提交的字符串执行正则表达式搜索是否更有效,或者将它留给 perl 脚本计算是否更快出什么类型的字符串?

为了澄清,我问这两个中哪一个更好:

  1. 提交的字符串
  2. Javascript 检测编码
  3. AJAX 提交编码和字符串到 perl 脚本
  4. Perl 脚本返回解码后的字符串

或者

  1. 提交的字符串
  2. AJAX 将字符串提交到 perl 脚本
  3. Perl 脚本检测编码并返回解码后的字符串

是否有一个特定的经验法则应该在哪里执行这种类型的处理,您认为什么更好(意味着更快)实施?

4

2 回答 2

3

必须在服务器上验证您的数据。时期。否则,一旦某个两位想要成为“黑客”的“黑客”传递给您一个 base64 字符串和一个声称您的 javascript 认为它是十六进制的标签,您就会驶入未知水域。

鉴于此,您是否还想客户端检测编码取决于您。这有一些潜在的好处,因为它允许您在数据以无效方式编码时根本不向服务器发送数据,或者告诉用户检测到什么编码并允许他们在不明确的情况下更正它(例如,十六进制数字是 base64 字符集的子集,因此任何十六进制字符串都可能是 base64)。请记住,如果客户端将编码传递给服务器,服务器仍必须对接收到的编码说明符进行健全性检查,并准备好在它不适合相应数据时忽略它(或完全拒绝请求)。

于 2010-11-22T15:47:10.720 回答
0

这取决于规模。

如果会有很多客户端请求执行此操作,那么在客户端执行此操作肯定会“更快”(例如在 Ajax 调用之前的 JS 中),因为将其放在服务器端会导致服务器处理所有这些请求它将竞争服务器的 CPU 资源,而客户端您将只对每个客户端进行一次检测。

如果您只预计很少的并发请求,那么在 Perl 中执行此操作可能会稍微快一些,因为 Perl 的正则表达式实现可能比 JavaScript 更好/更快(不过我没有任何统计数据来支持这一点)并且可能服务器有更好的中央处理器。

但我不会真的认为服务器端的余量会非常大,考虑到整个处理在任何一方都不应该花那么长时间,所以我建议从那以后进行客户端检查(根据第一段)规模更好。

如果两者之间的性能差异对您来说真的很重要,那么您应该在平均预期和最大预计客户端负载下实际实施两者并进行基准测试。

于 2010-11-22T14:51:01.437 回答