http - script - descargar archivos con php y mysql
¿Necesito Content-Type: application/octet-stream para descargar archivos? (1)
No.
El tipo de contenido debe ser lo que se sabe que es, si lo sabes. application/octet-stream
se define como "datos binarios arbitrarios" en RFC 2046, y aquí hay una superposición definitiva que es apropiada para entidades cuyo único propósito es guardarlas en el disco, y desde ese momento estar fuera de cualquier cosa " webby ". O mirarlo desde otra dirección; Lo único que se puede hacer con seguridad con application / octet-stream es guardarlo en un archivo y esperar que alguien más sepa para qué sirve.
Puede combinar el uso de Content-Disposition
de Content-Disposition
con otros tipos de contenido, como image/png
o incluso text/html
para indicar que desea guardar en lugar de mostrar. Solía ser el caso de que algunos navegadores lo ignoraran en el caso de text/html
pero creo que esto fue hace mucho tiempo en este punto (y me voy a la cama pronto, así que no voy a comenzar a probar un todo un montón de navegadores en este momento; tal vez más adelante).
RFC 2616 también menciona la posibilidad de tokens de extensión, y en estos días la mayoría de los navegadores reconocen en inline
para indicar que quiere que se muestre la entidad si es posible (es decir, si es un tipo que el navegador sabe cómo mostrar, de lo contrario no tiene otra opción) ). Este es, por supuesto, el comportamiento predeterminado de todos modos, pero significa que puede incluir la parte del filename
del filename
del encabezado, que los navegadores usarán (quizás con algún ajuste, por lo que las extensiones de archivo coinciden con las normas del sistema local para el tipo de contenido en cuestión, tal vez no ) como sugerencia si el usuario intenta guardar.
Por lo tanto:
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="picture.png"
Significa "No sé qué demonios es esto. Guárdelo como un archivo, preferiblemente llamado picture.png".
Content-Type: image/png
Content-Disposition: attachment; filename="picture.png"
Significa "Esta es una imagen PNG. Guárdela como un archivo, preferiblemente llamada picture.png".
Content-Type: image/png
Content-Disposition: inline; filename="picture.png"
Significa "Esta es una imagen PNG. Muéstrela a menos que no sepa cómo mostrar imágenes PNG. De lo contrario, o si el usuario elige guardarla, le recomendamos el nombre picture.png para el archivo que guarda".
De esos navegadores que reconocen en inline
algunos siempre lo usarían, mientras que otros lo usarían si el usuario hubiera seleccionado "guardar enlace como" pero no si hubieran seleccionado "guardar" mientras lo veía (o al menos IE solía ser así, puede haber cambiado hace algunos años).
El estándar HTTP dice:
Si este encabezado [Contenido-Disposición: adjunto] se usa en una respuesta con el tipo de contenido application / octet-stream, la sugerencia implícita es que el agente de usuario no debe mostrar la respuesta, sino que ingrese directamente una `guardar respuesta como ... . ''diálogo.
Lo leo como
Content-Type: application/octet-stream
Content-Disposition: attachment
Pero habría pensado que Content-Type
sería application/pdf
, image/png
, etc.
¿Debo tener Content-Type: application/octet-stream
si deseo que los navegadores descarguen el archivo?