具有查询字符串中的许多项目的HTTP GET请求

我们使用查询字符串中的大量数据进行HTTP GET请求,表示要检索的集合的所有ID。

关于URL中查询字符串长度的限制,快速谷歌搜索表示:

RFC 3986也指出没有限制,但由于DNS限制(见第2.3.3节),表明主机名限制为255个字符。 Microsoft声明Internet Explorer中URL的最大长度为2,083个字符,URL的路径部分中不超过2,048个字符。2009年5月1日

如果我们不使用IE,我是否应该担心可能超出查询字符串长度的限制? 我确定我看到了Node.js Express服务器上的限制超出了限制,特别是当我在GET请求的查询字符串中包含表示图像的base64字符串时。

解决这个问题的好方法是什么? 我们应该使用HTTP POST请求吗? 当然,我们不想将1个GET请求分解成1000个,只是为了避免这个问题。


如果你打算保持你的API清洁和RESTful,你可以将你的请求分成两部分。 第一个将您的配置发送到服务器进行计算(POST); 第二个会收集结果(GET)。

除了克服浏览器,防火墙,路由器等HTTP GET的限制之外,这种方法还有很多优点。例如,您可以稍后引入部分结果轮询或取消长时间运行计算的可能性。 此外,您可以保持网址简短和用户可读。

实现细节已经在这里描述。


在RESTful Web服务中,GET检索数据。 POST请求在服务器上创建数据并且没有大小限制,但服务器通常具有可以更改的默认限制。

如果维护一个RESTful应用程序不适用于您的情况,那么您可以使用POST。

需要注意的是,GET请求可以被缓存,但POST请求不能,所以如果你得到很多(相同)数据作为回报,你应该使用GET。


我会说,如果你的GET请求的长度超过了2000年 ,它的气味就像设计中的某些东西是错误的(我无法找到一个很好的理由,通过在base64中传递图像而不是POST,如你所提到的那样)。 在这种情况下,我宁愿与POST一起去; 还搜索约2048字符限制似乎它并不真正适用,请参阅Firefox和Chrome,我不会依赖这个有关微软即日期的信息,这里更详细的分析。

你也可以考虑为你的参数名称和值实现一个字符串缩写器,但在我看来,可读性更重要。 看看如何在javascript中缩短参数的这个问题。

链接地址: http://www.djcxy.com/p/42175.html

上一篇: HTTP GET request with many items in query string

下一篇: Why is the total amount of character in a GET limited?