【问题标题】:AJAX request abort on large query string Elixir Plug大型查询字符串 Elixir Plug 上的 AJAX 请求中止
【发布时间】:2018-08-20 07:06:06
【问题描述】:

我在 AJAX 请求中发送 2 个大查询字符串,它们基本上是 jpeg 的 Base64 编码。当相机不是高分辨率相机时,AJAX 请求不会中止。

一开始我以为是Nginx的问题,因为request entity too large报错我解决了,然后我修改了我的Plug as

  plug Plug.Parsers,
    parsers: [
      :urlencoded,
      {:multipart, length: 20_000_000},
      :json
      ],
    pass: ["*/*"],
    query_string_length: 1_000_000,
    json_decoder: Poison

在定义query_string_length 之后,现在我没有收到类似上面的任何错误,但 ajax 请求仍然中止。

Base64 编码字符串大小为546,591 bytes 或最大值。

我也尝试将 AJAX 请求超时增加到一个非常大的时间跨度,但它仍然失败。而且我现在不知道问题出在哪里。

我们如何在Plug 中接收长字符串?

StackOverflow 上一些关于人们使用 AJAX 和 PHP 的问题的一些答案,建议更改 post_max_size,我们如何在 Elixir Plug 中做到这一点?

【问题讨论】:

  • 您是否将其发布为“多部分”类型?
  • 不是吗?为什么会是多部分的?它只是一个字符串
  • 如果你把它作为字符串发布,你应该改变Plug.Parsers的长度。
  • PS,我在插件项目中没有找到query_string_length选项。
  • 我们正在发送带有 JSON 数据的 AJAX 请求。

标签: ajax elixir


【解决方案1】:

当您发送带有JSON数据的AJAX请求时,您应该将json的长度配置放在插件中。

  plug Plug.Parsers,
    parsers: [
      :urlencoded,
      {:multipart, length: 20_000_000},
      {:json, length: 80_000_000},
      ],
    pass: ["*/*"],
    json_decoder: Poison

我想你不会把数据放在帖子的查询字符串中,所以query_string_length - 查询字符串的最大允许大小是不需要的。


---原答案---

对于1.4.3 附近的插件版本,并且没有query_string_length 选项。

当您将数据作为字符串发布时,您使用的是Plug.Parsers

如果您愿意处理更大的请求,请提供 :length 到 Plug.Parsers。

您应该将代码query_string_length: 1_000_000 更改为length: 20_000_000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-04
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多