Назад | Перейти на главную страницу

Может ли .htaccess делать разные вещи на основе {HTTP: Content-Length}?

У меня есть сервер, который принимает HTTP POST от стороннего поставщика, а затем возвращает 200 или 500.

Третья сторона не находится под моим контролем и иногда отправляет очень большие POST-сообщения, например 40 МБ.

Эти 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
  2. Увеличить объем памяти, который PHP может использовать только для этого клиента. Попробуйте что-нибудь вроде этого (непроверено, 192.168.1.0/24 это адрес удаленной системы (ов)):

    <If "-R '192.168.1.0/24'">
          php_value memory_limit 100M
    </If>
    
  3. Используйте свою идею, если ничего не помогает, например:

    RewriteCond %{HTTP:Content-Length} -ge 200000 
    RewriteRule ^ - [R=200]
    

    Это тоже непроверено и вряд ли будет работать как есть, но его суть RewriteCond %{HTTP:Content-Length} часть.