O cabeçalho Content-Length não existe

6

Eu tenho o servidor nginx instalado no Linux. Quando envio uma solicitação com curl, o cabeçalho Content-Length está ausente da resposta.

O arquivo 1.php é:

<?php
   echo "hello";
?>

O pedido de exemplo é:

curl api.mysite.com/taxi/1.php -i

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Wed, 17 Sep 2014 06:16:00 GMT
Content-Type: text/html; charset=utf8
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.4-14+deb7u14
Age: 0
X-Cache: MISS from cache.turonnet.uz
Transfer-Encoding: chunked
Connection: keep-alive

Como posso consertar isso?

    
por user3393523 17.09.2014 / 08:43

2 respostas

19

content-length não pode ser definido se Transfer-Encoding estiver definido como chunked . No momento de enviar os cabeçalhos, o servidor não sabe quantos dados ele finalmente enviará. Cada bloco tem seu próprio campo de cabeçalho de tamanho (consulte a RFC ).

Se você pensar sobre isso, ao contrário de um arquivo HTML estático, o servidor da Web não tem como saber quantos dados serão gerados por um script PHP. Ele pode armazenar em cache o arquivo gerado e enviá-lo após o script ser concluído ou ser enviado em partes enquanto é gerado. O último é preferido especialmente para scripts com saída grande e um longo tempo de execução.

    
por 17.09.2014 / 09:07
1

O Nginx não sabe o comprimento porque o php está gerando conteúdo dinâmico. Você pode primeiro escrever no buffer de saída do php e depois configurar o campo de cabeçalho manualmente antes de liberar o buffer.

    
por 17.09.2014 / 14:18