Se eu estabelecer uma conexão Web usando HttpWebRequest e, em seguida, ler os dados de HttpWebResponse.GetResponseStream, sei que ela falhará se a conexão com a internet cair, mas preciso me preocupar com a perda de pacotes de dados se a leitura dos dados HttpWebResponse.GetResponseStream tiver finalizado sem erros? O protocolo/transporte subjacente trata da recuperação do pacote de dados perdido e de outros problemas?
Sim, o HTTP é baseado no TCP/IP, que cuida de todas as retentativas e da integridade dos dados por você. Dito isto, existem várias maneiras em que ele poderia falhar na entrega do arquivo. Por exemplo, se o servidor estiver usando HTTP 1.0 e utilizar um cabeçalho "Content-Close" no lugar de "Content-Length", o socket poderá ser fechado antes do arquivo ter sido completamente enviado. O objeto HttpWebRequest não gerará um erro porque o servidor disse "Eu fecharei isso quando tiver terminado" e a conexão foi encerrada, por isso a operação foi totalmente legal.
Sim, o HTTP é baseado no TCP/IP, que cuida de todas as retentativas e da integridade dos dados por você. Dito isto, existem várias maneiras em que ele poderia falhar na entrega do arquivo. Por exemplo, se o servidor estiver usando HTTP 1.0 e utilizar um cabeçalho "Content-Close" no lugar de "Content-Length", o socket poderá ser fechado antes do arquivo ter sido completamente enviado. O objeto HttpWebRequest não gerará um erro porque o servidor disse "Eu fecharei isso quando tiver terminado" e a conexão foi encerrada, por isso a operação foi totalmente legal.
0 comentários:
Postar um comentário