Descargar varios archivos en una solicitud HTTP

¿Cómo es posible descargar múltiples archivos en una solicitud HTTP? lo que quiero decir es que cuando tienes múltiples archivos adjuntos y seleccionas lo que quieres descargar, entonces presiona descargar para que se descarguen automáticamente y no tengas que hacer clic en cada uno manualmente.

Estoy usando PHP como un srcipting en el servidor.

Es posible enviar una respuesta multiparte en HTTP :

En general, HTTP trata un cuerpo de mensaje de varias partes de manera diferente a cualquier otro tipo de medio: estrictamente como carga útil. […] un agente de usuario HTTP DEBERÍA seguir el mismo o similar comportamiento que un agente de usuario MIME al recibir un tipo de varias partes.

[…] Si una aplicación recibe un subtipo multiparte no reconocido, la aplicación DEBE tratarlo como equivalente a “multipart / mixed”.

Pero dado que Firefox es el único navegador que conozco para admitir respuestas de varias partes (aparte de multipart / byterange ), debe usar algún formato de archivo para este fin.

Eso es prácticamente inutilizable debido al escaso soporte del navegador. Puede empaquetarlos en un archivo tar o zip en el lado del servidor y servir el archivo de archivo sin embargo.

Creo que no es posible dado que cada solicitud HTTP tiene solo un URI.

Puede comprimir el archivo con PHP, en el lado del servidor, y solicitar el archivo o devolverlo desde el script configurando los encabezados correspondientes, consulte la clase ZipArchive

O puede crear un cliente especial que pueda analizar su formato de mensaje entonces auto-especificado (una aplicación flash, un complemento), pero si su cliente es simplemente su navegador obtendrá una respuesta con una longitud de contenido fija del servidor.

No sé si hay una solicitud HTTP, pero si las quiere todas a la vez, puede recorrerlas mientras cambia el header('Location:') para cada una de ellas mientras redirige al script de descarga inmediata. Sin embargo, eso sería redundante y feo; Creo que la mejor manera sería comprimirlos todos, hay instrucciones sobre cómo hacerlo en la documentación de PHP .

Estoy usando múltiples iframes invisibles para activar múltiples descargas a la vez. Habrá más de una solicitud HTTP, pero el efecto será el que describió.

    

La mayoría de los navegadores le preguntará al usuario si desea permitir descargas múltiples (esto es para evitar que el sitio web envíe correo no deseado al sistema de archivos). Además, debe asegurarse de que el archivo se descargue y no solo se muestre dentro del iframe invisible (por ejemplo, mediante el header('Content-disposition: attachment'); dentro del script PHP que sirve el archivo).

En mi solución, uso JavaScript para cambiar el src después de que se descarga cada archivo, por lo que los archivos se cargan secuencialmente y mi servidor tiene que manejar menos solicitudes a la vez. Pero esa solución requiere AJAX y es mucho más complicada.

Puede ser que pueda usar JS para abrir varias ventanas emergentes, cada una cargando una URL de descarga. Espero que sea la única forma …