Erreurs

❌ Erreur SSL/TLS "Mixed Content Warning" — Causes et Solutions

🔒 SSL / TLS

Une page HTTPS charge des ressources HTTP non sécurisées

🔒 SSL/TLS 📋 6 causes 🔧 5 solutions
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

terminal
# 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)

terminal
# 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-security
3

Corriger WordPress Mixed Content

terminal
# 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

terminal
# 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 Location
5

Forcer HTTPS avec HSTS

terminal
# 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-requests via CSP dès la migration vers HTTPS
  • ✅ Activer HSTS avec max-age=31536000 pour 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