【问题标题】:Is a HTTP Get request of size 269KB allowed?是否允许大小为 269KB 的 HTTP Get 请求?
【发布时间】:2015-10-16 07:30:51
【问题描述】:

我正在调试一个测试用例。我使用 Python 的 OptionParser(来自 optparse)进行一些测试,其中一个选项是 HTTP 请求。

在此特定情况下,http 请求的输入大小为 269KB。 所以我的python程序因“参数列表太长”而失败(我验证没有传递其他参数,只有选项解析器所期望的请求和另一个参数。当我丢弃一些请求并减小其大小时,一切正常。所以我有充分的理由相信请求的大小导致了我的问题。)

HTTP 请求有可能那么大吗? 如果是这样,我该如何修复 OptionParser 来处理这个输入?

【问题讨论】:

  • 您是否从命令行传递了一个很长的字符串?
  • 'Argument list too long' 听起来像是 shell/操作系统反对你的命令行在 HTTP 请求运行之前有多长时间(但是是的,其他人认为 GET 在实践中达到顶峰是正确的早于 269KB)。
  • 不要使用选项为请求传递数据。你应该把它当作一个流。
  • 这可能与您的字符串长度有关stackoverflow.com/questions/29801975/…

标签: python http


【解决方案1】:

HTTP 请求有可能这么大吗?

是的,这是可能的,但不建议这样做,并且您可能会遇到兼容性问题,具体取决于您的 Web 服务器配置。如果您需要传递大量数据,则不应使用 GET。

如果是这样,我该如何修复 OptionParser 以处理此输入?

看来,OptionParser 已将自己的限制设置为远高于实际实现的限制。我认为“解决”这个问题的唯一方法是获取 Python 源代码并对其进行修改以满足您的要求。或者编写自己的解析器。

更新:我可能误解了这个问题,下面 Padraic 的评论很可能是正确的。如果你已经达到了命令行参数大小的操作系统限制,那么这不是一个 OptionParser 问题,而是对你的系统设计更基本的问题,这意味着你可能需要重新考虑你的解决方案。这也可能解释了为什么您尝试在应用程序中使用 GET(这样您就可以在命令行上传递它?)

【讨论】:

  • 我怀疑 OptionParser 设置了限制,操作系统设置了限制
【解决方案2】:

GET 请求与 POST 请求不同,它的所有信息都包含在 url 本身中。这意味着您有一个 269KB 的 URL,它非常长。

虽然对允许的大小没有理论上的限制,但许多服务器不允许超过几 KB 的 URL,并且在这种情况下应该返回 414 响应代码。一个安全的限制是 2KB,尽管大多数现代软件会允许更多一点。

但是,对于 269KB,使用 POST(或 PUT,如果语义更正确),它可以包含更大的数据块作为请求的内容而不是 url。

【讨论】:

    【解决方案3】:

    典型的限制是 8KB,但它可以变化(比如,甚至更小)。

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 2011-03-09
      • 2010-11-16
      • 1970-01-01
      相关资源
      最近更新 更多