GET 请求的长度是否有限制?
6 回答
不在RFC中,不,但有实际限制。
HTTP 协议对 URI 的长度没有任何先验限制。服务器必须能够处理它们所服务的任何资源的 URI,并且如果它们提供可以生成此类 URI 的基于 GET 的表单,则应该能够处理无限长度的 URI。如果 URI 比服务器可以处理的长(参见第 10.4.15 节),服务器应该返回 414(Request-URI Too Long)状态。
注意:服务器应谨慎依赖 URI 长度超过 255 字节,因为一些较旧的客户端或代理实现可能无法正确支持这些长度。
这篇文章总结的很好
摘要:它依赖于实现,因为 RFC 中没有指定限制。最多使用 2000 个字符(IE 的限制)是安全的。如果您接近这个长度,您应该确保您确实需要这么长的 URI,也许另一种设计可以解决这个问题。
URI 应该是可读的,即使在用于发送数据时也是如此。
应用户 Erickson 的要求,我发表我的评论作为答案:
我在服务器端对 IE8、IE9、FF14、Opera11、Chrome20 和 Tomcat 6.0.32(全新安装)、Jersey 1.13 进行了更多测试。我使用了 jQuery 函数 $.getJson 和 JSONP。结果:所有浏览器最多允许大约 5400 个字符。FF 和 IE9 最多处理了大约 6200 个字符。以上所有内容都返回“400 Bad request”。我没有进一步调查 400 的原因。我发现的最大值很好,因为我需要大约 2000 个字符。
该规范不限制 HTTP Get 请求的长度,但不同的浏览器实现了自己的限制。例如,Internet Explorer 实施了 2083 个字符的限制。
W3C 明确否认这是一个神话
带有 contentLength 参数的 setFixedLengthStreamingMode(int) 可以设置 HTTP 请求正文的固定长度。