我有一个服务器,它接受来自第三方的 HTTP POST,然后返回 200 或 500。
第三方不受我的控制,有时会发送非常大的帖子,例如 40MB。
这些 POST 导致我的 PHP 代码内存耗尽,我无法捕获此情况,因此 apache 发送了 500。
API 会永远重试该 POST,并且不会发送新数据,因此这是一个问题。
我尝试过各种各样的方法,但最终想到,如果我可以让 .htaccess 只返回 200 而不执行任何其他操作,如果 content_length > X,那么这至少可以为我赢得时间来重构它的工作原理。
所以…
是否可以在 .htaccess 中编写一条规则,使得如果 content_length > X,则返回 200?
答案1
我不喜欢在事情不顺利时假装“一切正常”。根据您的环境,您可能有多种方法:
- 增加 PHP 通常使用的内存(
php_value memory_limit 100M
在.htaccess
或类似php.ini
增加 PHP 仅对此客户端使用的内存。尝试以下操作(未经测试,
192.168.1.0/24
是远程系统的地址):<If "-R '192.168.1.0/24'"> php_value memory_limit 100M </If>
如果其他方法都失败了,就使用你的想法,如下所示:
RewriteCond %{HTTP:Content-Length} -ge 200000 RewriteRule ^ - [R=200]
这也是未经测试的,不太可能按原样工作,但它的核心是
RewriteCond %{HTTP:Content-Length}
部分。