Bonjour,
J'aimerais un éclaircicement sur l'usage du protocol HTTP, concernant les téléchargements. Il n'existe pas de support direct HTTP pour exprimer explicitement qu'un transfert est un téléchargement, mais la norme HTTP/1.1 spécifie que si un entête de réponse indique « Content-Disposition: attachment; ... » conjointement à un « Content-Type: application/octet-stream » alors le client HTTP est supposé l'interpréter comme étant une suggestion que le contenu ne doit pas être affiché, et qu'il doit réagir avec une boite de dialogue « save as ... » (il est également fortement conseillé que le client ignore l'éventuelle spécification de chemin contenu dans filename, pour ne conserver que le nom de fichier).
J'ai fait des essais, et oh miracle, cela fonctionne, même avec un fichier : IE propose d'enregistrer le fichier et ne l'affiche pas.
Mais j'ai constaté que cela ne fonctionne qu'avec la directive « Cache-Control: no-cache ». Il est en effet suggéré que cette directive peut être employée dans ces cas là (à moins que je n'ai lu ça ailleur que dans la spécification). En tous, et à moins que je n'ai fait une erreur dans les tests, ça n'a pas fonctionné avec un entête de réponse comprennant « Last-Modified » et « ETag ».
Exemple:
Code HTTP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Cache-Control: no-cache Content-Disposition: attachment; filename="xxxx" Content-Encoding: binary Content-Length: xxxx Content-Type: application/octet-stream
Ce qui me chatouille mal, c'est que j'aurais aimé des téléchargements avec Last-Modified et ETag, parce que je pense que c'est mieux pour les robots.
Est-ce que quelqu'un(e) qui connait bien le protocol HTTP peut m'éclairer sur ce point ? (bien que dans ce cas, cela dépend aussi de l'interprétation du client).
J'ai essayé avec no-cache et ETag/Last-Modified en mêmes-temps, mais ça ne fonctionne pas : ce qui est normal, puisque les deux directives sont contradictoires.
P.S. Avis à la modération : je ne suis certain d'avoir posté au bon endroit. Comme cela concerne un protocole, j'ai pensé que c'était le bon endroit... peut-être. Mais s'il-vous plait je vous en prie, essayez seulement de ne pas le déplacer dans PHP : il ne faut pas tout confondre.
Partager