如 http://www.boutell.com/newfaq/misc/urllength.html所述,HTTP 查询字符串的长度是有限的。它可以受到客户端(Firefox,IE,...)、服务器(Apache,IIS,...)或网络设备(应用防火墙,...)的限制。
今天我用搜索表单面对这个问题。我们开发了一个包含很多字段的搜索表单,这个表单作为 GET 请求发送到服务器,因此我可以将结果页面加入书签。
我们有如此多的字段,以至于我们的查询字符串长度为1100字节,并且我们有一个防火墙,它删除超过1024字节的 HTTP GET 请求。我们的系统管理员建议我们使用 POST,这样就没有限制了。
当然,POST 将工作,但我真的觉得作为一个 GET 而不是一个 POST 的搜索。因此,我认为我将检查我们的字段名,以确保查询字符串不会太长,如果不能,我将是务实的,并使用 POST。
但是 RESTful 服务的设计是否存在缺陷?如果 GET 请求的长度有限,那么如何将大型对象发送到 RESTful Web 服务呢?例如,如果我有一个基于文件进行计算的程序,并且我想提供一个 RESTful Web 服务,如下所示: http://compute.com?content=<base64 file>
。这不会起作用,因为查询字符串没有无限长度。
我有点困惑。