【问题标题】:Is there a limit to the length of a GET request? [duplicate]GET 请求的长度是否有限制? [复制]
【发布时间】:2010-09-20 22:44:10
【问题描述】:

GET 请求的长度是否有限制?

【问题讨论】:

  • 这个问题已关闭,因为 SO 中有类似的问题,但另一个问题是在 2 年后提出的。因此,这不能是重复的。
  • 这个问题被标记为a question asked after this question的重复是多么有趣......即使在this question之后提出了这个有更正确答案的问题

标签: limit http-get


【解决方案1】:

RFC中没有,没有,但有实际限制。

HTTP 协议对长度没有任何先验限制 一个 URI。服务器必须能够处理它们所使用的任何资源的 URI 服务,并且应该能够处理无限长度的 URI,如果它们 提供可以生成此类 URI 的基于 GET 的表单。一台服务器 如果 URI 较长,则应返回 414(Request-URI Too Long)状态 超出服务器的处理能力(参见第 10.4.15 节)。

注意:服务器应谨慎对待取决于 URI 长度 超过 255 个字节,因为一些较旧的客户端或代理实现 可能无法正确支持这些长度。

【讨论】:

  • HTTPbis 对此添加了一点:“在实践中发现了对请求目标长度的各种临时限制。建议所有 HTTP 发送者和接收者都支持 8000 或更多八位字节的请求目标长度。” tools.ietf.org/html/…
【解决方案2】:

This article总结得很好

总结:它取决于实现,因为 RFC 中没有指定限制。最多使用 2000 个字符(IE 的限制)是安全的。如果您接近这个长度,您应该确保您确实需要这么长的 URI,也许另一种设计可以解决这个问题。

URI 应该是可读的,即使在用于发送数据时也是如此。

【讨论】:

  • 好文章,但 URI 可读性与 GET 与 POST 无关。目的是为 Web 定义一个 RESTful API,以区分请求类型的功能差异。对于超链接,HTTP GET 请求可能往往是用户可读的,但这不是他们的目的,只是一种用途。 w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3
  • URI 的目的不是为 Web 定义 RESTful API。完全没有。 w3.org/Provider/Style/URI.html
  • 正确。然而,GET & POST 的目的是。问题是询问 HTTP GET 请求。您假设他的意思是在网站上找到的超链接,旨在供人类阅读。这是 GET HTTP 的一种特殊用法,但远非唯一。
  • 抱歉,您在这里被误导了。 REST 被设想用来描述 HTTP 协议,因此虽然该术语本身可能晚于 GET 和 POST,但它的存在只是为了描述它们的用途和作用。我必须在这里向权威人士求助,因为您不是在与我争论这个问题,您是在与编写 HTTP 规范并发明“REST”的 Roy Fielding 争论。同样,您链接的文章涉及人类可读的 URI,它代表了 HTTP 使用的一小部分:“短(尽可能)。这使它们易于写下、拼写或记住。” .
  • 我不是在和罗伊·菲尔丁争论,我在争论你对菲尔丁所说的话的解释。实际上,您是在向后解释这句话,他是说 HTTP/1.1 允许人们以最好的方式做 REST,而不是 HTTP/1.1 的目的是做 REST。我真的不明白他在哪里说这些方法存在的原因(这就是它们的目的)是为了适应 RESTful 架构。他说,如果您的应用程序与 REST 有意义的场景相匹配,您应该使用它来获得最佳行为。 [ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm#sec_6_1]
【解决方案3】:

应用户 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 个字符。

【讨论】:

    【解决方案4】:

    规范不限制 HTTP Get 请求的长度,但不同的浏览器实现了自己的限制。例如,Internet Explorer 的限制是 2083 个字符。

    【讨论】:

    • 感谢您的准确价值 => +1。但是 IE 的具体版本是什么?我的 IE8 不接受地址栏(URL 输入框)上超过 2048 个字符。但是我的 JavaScript 代码可以使用 3586 个字符发送 XMLHttpRequest GET(我没有测试更多)。因此,您在哪里找到了 2083?干杯。
    • 我在服务器端使用 IE8、IE9、FF14、Opera11、Chrome20 和 Tomcat 6.0.32(全新安装)、Jersey 1.13 进行了更多测试。我使用了 jQuery 函数 $.getJson 和 JSONP。结果:所有浏览器最多允许大约 5400 个字符。 FF 和 IE9 最多处理了大约 6200 个字符。以上所有内容都返回“400 Bad request”。我没有进一步调查导致 400 的原因。我发现的最大值很好,因为我需要大约 2000 个字符。
    • 这篇 MS 知识库文章指出 IE8(及更早版本)的 GET 和 POST URL 的 URL 限制为 2083 个字符:support.microsoft.com/kb/208427
    • @OneWorld 你的评论应该是一个答案,这样人们就会看到它,我可以投票。感谢您的测试。
    【解决方案5】:

    W3C 在这里明确否认这是一个神话

    http://www.w3.org/2001/tag/doc/get7#myths

    【讨论】:

    【解决方案6】:

    带 contentLength 参数的 setFixedLengthStreamingMode(int) 可以设置 HTTP 请求正文的固定长度。

    【讨论】:

    • 这似乎是唯一真正相关的答案。其他都是关于 URL 长度的,问题中没有出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多