POSTS
修改puma源码中GET请求地址长度的最大值
说一下我遇到的问题,在一个GET请求的接口中,由于请求字符串太长而导致的错误,因为是之前的旧项目,如果将接口改成POST请求的话,很多地方都要改,比如前端、APP端等,所以只能另外找方法。
我粘贴一下因puma本身的限制而报的错误信息:
<Puma::HttpParserError: HTTP element QUERY_STRING is longer than the (1024 * 10) allowed length xxxxx
错误提示说查询字符串超过默认最大的10240,我们想要去改默认的最大值就必须找到这段代码。
1.从github上fork puma的源代码,地址github-puma。
2.然后将puma克隆到本地
3.这里需要注意一下,在动手之前,需要找到原项目puma的版本,避免修改后版本对应不上。我项目Gemfile里puma的版本范围是:
# 大于3.11 小于4.0都行
gem 'puma', '~> 3.11'
4.我本地的puma是 3.12.1
puma --version
puma version 3.12.1
5.所以我直接找到3.12.1 的tag然后新建分支,进行修改
# 获取该tag的代码
git checkout v3.12.0
# 此代码现在是不能更改的,需要新建一个分支
git checkout -b puma-custom
6.在该分支下找到 ext/puma_http11/puma_http11.c 文件
找到如下所示的代码段:
7.我这里只对REQUEST_URI和QUERY_STRING做了修改,改成了1024*100。
8.然后将本地修改的代码提交到自己的fork的puma项目上。
9.最后就是修改Gemfile将rails默认的puma换成自己修改的puma上面。
gem 'puma', git: 'https://github.com/JohnnyTing/puma.git', branch: 'puma-custom'
最后就解决了这个问题。