Erreurs
❌ Erreur SSL/TLS "Mixed Content Warning" — Causes et Solutions
🔒 SSL / TLS
Une page HTTPS charge des ressources HTTP non sécurisées
Le
Mixed Content survient quand une page chargée en HTTPS tente de charger des ressources (images, scripts, CSS, iframes) via HTTP non sécurisé. Les navigateurs modernes bloquent le contenu mixte actif (scripts, CSS) et affichent des avertissements pour les ressources passives (images).⚠️ Causes possibles
URLs codées en dur avec http://
Des liens src='http://...' dans le HTML, CSS ou JavaScript
Migration HTTP → HTTPS incomplète
Le site a migré en HTTPS mais les anciennes URLs en base de données sont en http://
Ressources tierces non HTTPS
CDN, Google Maps, YouTube embeds encore en HTTP
WordPress ou CMS — URL de site incorrecte
L'URL de base dans wp_options est encore http://
Proxy ou reverse proxy mal configuré
Le reverse proxy (Nginx) transmet des URLs http:// au lieu de https://
Images uploadées avec URL absolue http://
Les images stockées en base de données ont une URL http://
🔧 Solutions étape par étape
1
Identifier les ressources mixtes
# Via le navigateur
# Chrome : F12 → Console → chercher "Mixed Content"
# Firefox : F12 → Console → chercher "Chargement de contenu mixte"
# Via curl — analyser le HTML
curl -s https://monsite.fr | grep -i 'src="http://' | head -20
curl -s https://monsite.fr | grep -i 'href="http://' | head -20
# Via grep récursif sur les fichiers du site
grep -r 'src="http://' /var/www/html/ --include="*.html" --include="*.php"
grep -r "url('http://" /var/www/html/ --include="*.css"
# Outil en ligne
# https://www.whynopadlock.com/
# https://www.jitbit.com/sslcheck/2
Corriger avec upgrade-insecure-requests (CSP)
# Header HTTP qui force le navigateur à upgrader http:// → https://
# Nginx — ajouter dans le bloc server
add_header Content-Security-Policy "upgrade-insecure-requests;";
# Apache — dans .htaccess ou VirtualHost
Header always set Content-Security-Policy "upgrade-insecure-requests;"
# PHP — dans l'en-tête
header("Content-Security-Policy: upgrade-insecure-requests;");
# Vérifier que le header est envoyé
curl -I https://monsite.fr | grep -i content-security3
Corriger WordPress Mixed Content
# Via WP-CLI — mettre à jour les URLs en base de données
wp search-replace 'http://monsite.fr' 'https://monsite.fr' --all-tables
# Via phpMyAdmin / MySQL
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://monsite.fr', 'https://monsite.fr');
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://monsite.fr', 'https://monsite.fr');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://monsite.fr', 'https://monsite.fr');
# Plugin WordPress : Better Search Replace
# Ou : Really Simple SSL
# Vérifier les paramètres WordPress
grep -i siteurl /var/www/html/wp-config.php
# Ajouter si nécessaire :
# define('WP_HOME', 'https://monsite.fr');
# define('WP_SITEURL', 'https://monsite.fr');4
Configurer la redirection HTTP → HTTPS
# Nginx — redirection permanente HTTP vers HTTPS
server {
listen 80;
server_name monsite.fr www.monsite.fr;
return 301 https://$server_name$request_uri;
}
# Apache — .htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# Ou via Header
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# Tester la redirection
curl -I http://monsite.fr | grep Location5
Forcer HTTPS avec HSTS
# HSTS (HTTP Strict Transport Security) — force HTTPS pour X secondes # Nginx add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; # Apache Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" # Paramètres HSTS : # max-age=31536000 → 1 an # includeSubDomains → s'applique aux sous-domaines # preload → soumettre à la liste HSTS preload des navigateurs # Soumettre son domaine : https://hstspreload.org/ # Vérifier HSTS curl -I https://monsite.fr | grep Strict-Transport
🛡️ Comment éviter cette erreur
- ✅ Configurer
upgrade-insecure-requestsvia CSP dès la migration vers HTTPS - ✅ Activer HSTS avec
max-age=31536000pour forcer HTTPS durablement - ✅ En WordPress, utiliser le plugin 'Really Simple SSL' qui gère automatiquement la migration
- ✅ Toujours utiliser des URLs relatives (
/images/logo.png) ou des URLs HTTPS dans le code
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google