如何增加请求行/字段大小限制?

Posted

技术标签:

【中文标题】如何增加请求行/字段大小限制?【英文标题】:How to increase Request line/fieldsize limit? 【发布时间】:2018-08-16 03:32:28 【问题描述】:

我想在 URL 中编码一个长的 Base64 编码字符串。

当前在 mod-rewrite 下重写的长 URL(超过 300 个字符)会导致禁止 (402) 错误。

如果我的请求 URL 是 355 个字符,则会导致错误,但是当我将其减少到 300 时,它会起作用。

服务器中是否有限制请求行大小的默认值?

我在服务器配置的任何地方都找不到 LimitRequestLine/FieldSize 指令。

这是我的重写规则:

 RewriteEngine On
 RewriteCond %DOCUMENT_ROOT%REQUEST_FILENAME !-f
 RewriteCond %DOCUMENT_ROOT%REQUEST_FILENAME !-d
 RewriteRule ^json/ base64json.php [L]

一个 URL 看起来像这样:

 http://sub.mydomain.com/json/longrandomnumbers?param=xxx

我希望从重写的 url 中提取随机数和参数,但它说禁止权限被拒绝,在 apache2 错误日志中,它说: 周一21年3月19日:03:31.711559 2018] [核心:错误] [PID 20504](36)文件名过长:客户167.220.24.128:45071] AH00036:进入/ JSON / eyJldmVudHMiOlt7InNlc3Npb25JZCI6InMxNTAxMjY0OTIzeDYyZjg4MTNlNjkzMWM5eDU4MjQ0MjY2IiwiaW5zdGFudGlhdGlvbiI6IjkxMTMwMDQ3MTQ3OTE1ODgiLCJpbmRleCI6MCwiY2xpZW50VGltZXN0YW1wIjoxNTIwMzg3NTkwLjE2OSwibmFtZSI6ImNyZWF0aXZlTG9hZGVkIiwidmlld2FiaWxpdHkwME1lYXN1cmFibGUiOnRydWUsInZpZXdhYmlsaXR5NTAxTWVhc3VyYWJsZSI6ZmFsc2V9XX0 =失败(文件系统路径“/无功/网络/曲目/ JSON / eyJldmVudHMiOlt7InNlc3Npb25JZCI6InMxNTAxMjY0OTIzeDYyZjg4MTNlNjkzMWM5eDU4MjQ0MjY2IiwiaW5zdGFudGlhdGlvbiI6IjkxMTMwMDQ3MTQ3OTE1ODgiLCJpbmRleCI6MCwiY2xpZW50VGltZXN0YW1wIjoxNTIwMzg3NTkwLjE2OSwibmFtZSI6ImNyZWF0aXZlTG9hZGVkIiwidmlld2FiaWxpdHkwME1lYXN1cmFibGUiOnRydWUsInZpZXdhYmlsaXR5NTAxTWVhc3VyYWJsZSI6ZmFsc2V9XX0 =') 和 失败(文件系统路径

'/无功/网络/曲目/ JSON / eyJldmVudHMiOlt7InNlc3Npb25JZCI6InMxNTAxMjY0OTIzeDYyZjg4MTNlNjkzMWM5eDU4MjQ0MjY2IiwiaW5zdGFudGlhdGlvbiI6IjkxMTMwMDQ3MTQ3OTE1ODgiLCJpbmRleCI6MCwiY2xpZW50VGltZXN0YW1wIjoxNTIwMzg3NTkwLjE2OSwibmFtZSI6ImNyZWF0aXZlTG9hZGVkIiwidmlld2FiaWxpdHkwME1lYXN1cmFibGUiOnRydWUsInZpZXdhYmlsaXR5NTAxTWVhc3VyYWJsZSI6ZmFsc2V9XX0 =') P>

我尝试将 RequestLine/FieldSize 添加到 apache2.conf,没有用,想知道如何绕过我使用的文件系统的限制,以及为什么在重定向到正确的路径(即 base64json)之前以某种方式检查长度如此烦人.php,我可以把它作为一个长参数来代替吗?可能是ubuntu文件系统造成的。

我在 Ubuntu 14.02 上使用 Apache2.4.7。

【问题讨论】:

我刚刚通过重写规则在 Debian 8.3 上的 Apache 2.4.10 上尝试了一个包含 1092 个字符长的参数(几乎是默认配置)的 url,我的参数很好。跨度> 尝试不使用重写规则,只传递一个长字符串作为参数。 foo.php?bar=bazbazbaz...,它还会倒下吗? 我需要将我的参数长度推到超过 4000 个字符,此时我被禁止了。如果我走得更高,我会从 apache 收到 Request uri too long 错误。这是通过 docker 在底层 ext4 文件系统上实现的。 你是对的,谢谢。我用 mydomain/base64json.php?longercharactersandparameters 拉它,它确实接受它,所以我的重写规则有什么问题,请参阅上面的规则。 如前所述,我可以使用该规则(在 .htaccess 中),它最多可以处理大约 4000 个带有简单字符串的字符。 【参考方案1】:

这必须在加载任何虚拟主机之前定义。 将此添加到您的apache2.conf 中,对。 编辑后是否重启了 apache 守护进程?

sudo service apache2 restart

【讨论】:

我做了,但仍然是同样的错误和限制它的长度

以上是关于如何增加请求行/字段大小限制?的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra 行缓存大小增加但未接收行请求

Node + react js在发布请求中增加上传文件大小

如何在 phpMyAdmin 中增加导入大小限制

如何使用 .htaccess 或 php.ini 增加上传文件大小限制? [复制]

hdfs + namenode + 编辑文件随着巨大的大小增加以及如何限制编辑文件的大小

增加 SilverStripe 网站的最大文件上传大小