Je construis une application Django qui aura besoin de SSL sur toutes les pages orientées vers l’utilisateur. Sur d’autres projets où SSL était requirejs, je suis confronté à des complications lors de la diffusion de fichiers multimédias à partir d’un hôte virtuel différent sur le même serveur. Par exemple, la page est la suivante: https://www.mysite.com mais elle fait référence à http://media.mysite.com/css/screen.css , et le navigateur affiche ensuite des avertissements de sécurité pour l’utilisateur.
Je pense que c’est la meilleure pratique de Django pour conserver des fichiers statiques sur au moins leur propre hôte virtuel, ce qui – pour autant que je sache – nécessite un sous-domaine tel que media.blahblah.com.
De toute évidence, il existe de nombreuses applications Django sur SSL, il me faut donc manquer quelque chose. Des conseils sur la façon dont cela est géré?
La réponse générale est que vous devez modifier l’URL que vous utilisez pour référencer vos fichiers statiques vers un fichier utilisant HTTPS. L’utilisation d’un chemin relatif (/static/css/screen.css) au lieu d’une URL absolue (http: // …) permet à votre média de basculer automatiquement de HTTP à HTTPS en fonction de la page de renvoi, mais force votre main à essayer servir selon les meilleures pratiques décrites ci-dessous.
Si vous utilisez Django 1.3 avec consortingb.staticfiles, il semblerait que vous deviez simplement modifier le paramètre STATIC_URL. Dans le cas contraire, vous devrez mettre à jour les chemins manuellement (ou toutefois, vous spécifiez vos actifs statiques).
Les meilleures pratiques pour les supports statiques tels que CSS et JavaScript exigent que vous les diffusiez depuis un serveur Web (pas seulement virtualhost) différent de celui qui héberge vos pages Django. L’idée est que vous pouvez utiliser un serveur Web à faible encombrement pour servir ces fichiers simples très rapidement. Si vous les servez du même serveur Web qui exécute votre site Django, il est fort probable qu’un certain nombre de modules supplémentaires soient chargés mais ne sont pas utilisés pour les requêtes où vous ne faites que servir un fichier statique.
Comme vous devez servir des fichiers statiques sécurisés, vous avez plusieurs options: