web-dev-qa-db-fra.com

En-tête HTTP cassé? Les navigateurs n'ouvrent pas notre pdf, mais ouvrent tous les autres fichiers .pdf

Mon Firefox et Chrome ouvrent généralement les fichiers PDF très bien, sans rien demander et dans la fenêtre du navigateur.

Lorsque vous cliquez sur un lien vers un PDF sur notre propre site Web:

  • Firefox demande s'il doit les télécharger, pour le voir, j'ai besoin d'ouvrir l'historique des téléchargements.
  • Chrome le télécharge automatiquement, mais ici aussi, l'ouverture du PDF nécessite un clic supplémentaire.

Si je copie le PDF sur un autre serveur (installation de Django avec lighttpd), Firefox et Chrome s'affichent correctement, comme d'habitude.

Qu'est-ce qui ne va pas?

1
Philipp Zedler

Voir Comment forcer les fichiers à s'ouvrir dans le navigateur au lieu du téléchargement (pdf)? qui a une réponse de ColinM qui vous dit exactement ce que les en-têtes doivent être:

Pour indiquer au navigateur que le fichier doit être visualisé dans le navigateur:

Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"

Pour que le fichier soit téléchargé plutôt que visualisé:

Content-Type: application/pdf
Content-Disposition: attachment; filename="filename.pdf"

EDIT: Les guillemets autour du nom de fichier sont obligatoires si le nom de fichier contient des caractères spéciaux tels que filename[1].pdf, ce qui risquerait sinon d'empêcher le navigateur de traiter la réponse.

3
Stephen Ostermiller

La solution était plutôt spéciale.

Le serveur avait le type MIME par défaut application/octet-stream pour les fichiers PDF. Après avoir changé ceci en application/pdf tout a bien fonctionné.

Dans la configuration de lighttpd, j'ai apporté la modification en ajoutant cette définition:

mimetype.assign += ( ".pdf" => "application/pdf" )
0
Philipp Zedler