estimando o tamanho dos cabeçalhos HTTP de resposta

2

Estou tentando baixar um arquivo por meio de uma conexão de soquete básica, usando uma solicitação HTTP GET. Então, eu tenho que especificar quantos bytes de dados que chegam eu tenho que ler a partir do soquete. No entanto, estou tendo problemas para decidir a quantidade de dados (digamos, em bytes) com os quais o servidor responderia. Eu sei que há um campo "Content-Length" na resposta enviada pelo servidor, mas isso me dá o tamanho dos dados reais (sem os cabeçalhos http).
Existe uma maneira de obter o tamanho exato dos cabeçalhos HTTP enviados pelo servidor ou uma estimativa é necessária?
(Estou fazendo isso para fazer o download em uma rede móvel, onde cada bit de dados é importante em termos de tempo e dinheiro, portanto não desejo fazer uma estimativa desnecessariamente maior do tamanho do cabeçalho.)

    
por Pushpak Dagade 23.03.2012 / 10:56

1 resposta

2

Você não lê um número fixo de bytes. Você leu quantos bytes houver (ou até você abortar) até atingir a marca END OF HEADER (para HTTP que é \n\r\n até onde eu saiba). Embora, por razões de segurança, o tamanho real do cabeçalho seja limitado pelo servidor HTTP :

There is no limits to size of each header field name or value, or number of headers in standard itself. However most servers, clients and proxy software impose some limits for practical and security reasons. For example Apache 2.3 server by default limits each header size to 8190 bytes, and there can be at most 100 headers in single request.

Basear-se em buffers de tamanho fixo nessa comunicação seria um grande erro. Seu buffer precisa crescer dinamicamente. Você não deve confiar na exatidão do campo Content-Length ao receber o corpo da mensagem.

    
por 23.03.2012 / 11:15

Tags