Estamos intentando escribir un servidor de actualización para nuestro software utilizando el componente TIdHTTPServer. Actualmente estamos sirviendo un archivo XML que enumera las actualizaciones disponibles y sus versiones de archivos, etc., cuando el programa cliente encuentre una versión actualizada, debería comenzar a descargarla usando BITS.Es TIdHTTPServer Compatible con Microsoft BITS
Ahora aquí es donde tenemos un problema, nuestros programas están solicitando el archivo XML y viendo que hay una actualización disponible. Luego, crea un trabajo BITS para descargarlo, sin embargo, BITS sigue informando que la descarga falló. Podemos descargar el archivo usando la misma URL e IE/Firefox/Chrome.
así que mi pregunta:
Es TIdHTTPServer compatible con BITS?
Pregunto esto porque he descubierto que existen estos requisitos de descarga para que los bits funcionen.
HTTP Requirements for BITS Downloads
BITS soporta cargas y descargas HTTP y HTTPS y requiere que el servidor soporta el protocolo HTTP/1.1. Para las descargas, el método Head del servidor HTTP debe devolver el tamaño del archivo y su método Get debe admitir los encabezados Content-Range y Content-Length. Como resultado, BITS solo transfiere contenido de archivos estáticos y genera un error si intenta transferir contenido dinámico, a menos que el script ASP, ISAPI o CGI admita los encabezados Content-Range y Content-Length.
BITS puede usar un servidor HTTP/1.0 siempre que cumpla con los requisitos de Head y Get.
Para apoyar la descarga de los rangos de un archivo, el servidor debe ser compatible con los siguientes requisitos:
Permitir cabeceras MIME para incluir el contenido-gama estándar y las cabeceras Content-Type, más un máximo de 180 bytes de otras cabeceras. Deje un máximo de dos CR/LF entre los encabezados HTTP y la primera cadena de límite.
Bien, habiendo mirado los rastros del wireshark y la fuente de Indy parece que el TIdHTTPServer no soporta los encabezados Range/Content-Range para las solicitudes de recuperación de rango. – MikeT
Entonces, es posible leer el encabezado Range desde la solicitud GET, luego leer los bytes solicitados en una secuencia de memoria desde el archivo fuente, asignar la secuencia de memoria a la secuencia de contenido para enviar y finalmente establecer el encabezado de rango de contenido. – MikeT
TIdHTTPServer es compatible con los encabezados 'Content-Type',' Content-Range' y 'Range', pero es responsabilidad del manejador de eventos OnCommandGet de la aplicación mirarlos y enviar los datos correctos en consecuencia. La clase TIdHTTPHeaderEntityInfo tiene propiedades ContentType, ContentRangeStart, ContentRangeEnd, ContentRangeInstanceLength y Range disponibles. TIdHTTPServer no maneja los datos reales que se extienden de forma nativa, el código del usuario tiene que administrarlos. –