O .htaccess pode fazer coisas diferentes com base em {HTTP: Content-Length}?

1

Eu tenho um servidor que aceita HTTP POSTs de um terceiro e retorna um 200 ou 500.

A terceira parte não está sob meu controle e, às vezes, envia POSTs muito grandes, por exemplo, 40MB.

Esses POSTs fazem com que meu código PHP fique sem memória, o que não consigo detectar e, portanto, o apache envia um 500.

A API repete esse POST para sempre e não envia novos dados, portanto, isso é um problema.

Eu tentei várias coisas, mas acabei pensando que se eu pudesse ter o .htaccess, basta retornar um 200 e não fazer mais nada, se o content_length for > X, então isso pelo menos me daria tempo para reestruturar como isso funciona.

Então ...

É possível escrever uma regra no .htaccess de forma que if content_length > X, retorna um 200?

    
por Rich Bradshaw 15.05.2017 / 15:47

1 resposta

2

Eu não gosto da ideia de fingir "tudo bem" quando não é. Dependendo do seu ambiente, você pode ter várias abordagens:

  1. Aumenta a memória que o PHP pode usar em geral ( php_value memory_limit 100M in .htaccess ou similar em php.ini
  2. Aumente a memória que o PHP pode usar somente para este cliente. Tente algo assim (não testado, 192.168.1.0/24 é o endereço do (s) sistema (s) remoto (s)):

    <If "-R '192.168.1.0/24'">
          php_value memory_limit 100M
    </If>
    
  3. Use sua ideia se tudo mais falhar, algo assim:

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

    Isso também não foi testado e é improvável que funcione como está, mas o núcleo dele é a parte RewriteCond %{HTTP:Content-Length} .

por 15.05.2017 / 16:57