У меня есть сервер, который принимает HTTP POST от стороннего поставщика, а затем возвращает 200 или 500.
Третья сторона не находится под моим контролем и иногда отправляет очень большие POST-сообщения, например 40 МБ.
Эти POST приводят к тому, что моему PHP-коду заканчивается память, которую я не могу уловить, поэтому apache отправляет 500.
API повторяет этот POST навсегда и не отправляет новые данные, поэтому это проблема.
Я пробовал разные вещи, но в итоге подумал, что если бы я мог .htaccess просто возвращать 200 и больше ничего не делать, если бы content_length был> X, то это, по крайней мере, выиграло бы мне время, чтобы реструктурировать, как это работает.
Так…
Можно ли написать правило в .htaccess, чтобы если content_length> X, возвращалось 200?
Мне не нравится притворяться, будто «все в порядке», когда это не так. В зависимости от вашей среды у вас может быть несколько подходов:
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}
часть.