Guide : Mixed Content
Ce que mixed contenu est, pourquoi active mixed contenu obtient bloqué pendant que passive obtient warned à propos de, et comment detect et corriger insecure sub-resources à scale — le navigateur console, CSP reporting, upgrade-insecure-requêtes, bloquer-tous-mixed-contenu, et comment CMSes et ad tech reintroduce il.
Mixed contenu est an HTTPS page chargement a sub-resource over HTTP. Navigateurs' actuel taxonomy est upgradable versus blockable; le older active/passive split encore tracks que pour la plupart types, avec exceptions (CORS-enabled images, srcset/picture, et IP-host requêtes sont blockable, pas upgradable). Active mixed contenu — scripts, stylesheets, iframes, XMLHttpRequest/récupérer — est bloqué outright parce que a tampered script peut rewrite le entier page, donc c’est ce que en réalité breaks a site après an HTTP→HTTPS migration; corriger il premier. Passive mixed contenu — images, audio, video — historically chargé avec a downgraded padlock et est maintenant increasingly auto-upgraded or bloqué aussi. Anchor liens et autre top-level HTTP navigation ne sont pas mixed contenu, et aucun sont insecure downloads (a connexe, séparé boundary). Trouver il à travers récupéré source, rendu/runtime state, et real-utilisateur sessions: explorer le HTTPS site, watch le Chrome DevTools console (exact wording est navigateur/version spécifique), or collect Contenu-Security-Policy-Rapport-Seulement violations; corriger il par premier confirming le HTTPS equivalent en réalité fonctionne, alors pointing chaque sub-resource à https:// (relative/protocol-relative paths seulement après verifying ownership et base-URL behavior). Le contenu-Security-Policy: upgrade-insecure-requêtes header rewrites dans-scope http:// sub-resource requêtes — notamment cross-origin ones — à https:// avant ils sont sent et avant mixed-contenu/CSP vérifications exécuter; il a aucun HTTP fallback si le upgrade fails, c’est a safety net plutôt que a substitute pour cleaning le source, il ne fait pas upgrade top-level navigation à tiers origins (donc il n’est pas a replacement pour HSTS), et paramètre le directive itself dans rapport-seulement mode est a aucun-op — monitor avec a séparé rapport-seulement policy à la place. CMS databases (back up et dry-exécuter replacements — naive string-remplacer peut corrupt serialized données), plugins/themes, service workers/caches, et ad/analytics balises sont le usual re-offenders; audit à scale avec a robot d’exploration et CSP reporting plutôt que page par page.
TL;DR — Mixed contenu est quand a secure
https://page charge quelque chose — an image, a script, a stylesheet — over insecurehttp://. Que mixes a secure page avec insecure pieces, qui defeats le point de HTTPS. Navigateurs bloquer le dangerous kinds (scripts, styles, iframes) et warn à propos de le milder kinds (images, media). c’est le la plupart courant chose que breaks a site correct après vous switch à HTTPS, et le corriger est simple: faire chaque resource charger overhttps://aussi.
Ce que mixed content is
Quand vous déplacer a site à HTTPS, lune page itself charge securely. Mais une page est jamais
simplement le HTML — il pulls dans images, scripts, stylesheets, fonts, videos, et
parfois embedded frames depuis autre places. Si quelconque de ceux pieces sont encore
requested over plain http://, vous ont mixed contenu: a secure page carrying
insecure cargo. Preuve à l’appui de cette affirmation Mixed content occurs when a secure page loads resources over insecure HTTP, and browsers upgrade or block mixed-content requests by resource type. Portée : MDN documents current browser categories and behavior; individual browser versions may differ at the margins. Niveau de confiance : élevé · Vérifié : MDN: Mixed content
As Google’s propre explainer puts il, “Une page a mixed contenu quand son initial HTML est chargé over a secure HTTPS connection, mais autre resources (tel as images, videos, stylesheets, et scripts) sont chargé over an insecure HTTP connection.”
Que matters parce que le insecure pieces reopen exactly le hole HTTPS closed.
Anyone sitting on le network entre le visitor et le serveur peut lire or tamper
avec ceux http:// requêtes — donc le padlock dans le adresse bar est promising plus
security que lune page en réalité a.
Le deux kinds, et ce que navigateurs faire à propos de les
Navigateurs don’t treat tout mixed content the même. Ils sort it by how beaucoup damage the insecure resource pourrait do:
- Active mixed contenu — scripts, stylesheets, et iframes. Ces peut contrôler le entier page, donc a tampered un pourrait rewrite tout. Navigateurs bloquer il. Ce est ce que en réalité breaks votre layout, votre interactivity, or a entier embedded widget après a migration.
- Passive mixed contenu — images, audio, et video. Ces ne peut pas prendre over le page, donc navigateurs ont historically chargé les mais taken away le padlock et affiché a “not fully secure” warning. c’est modification — modern navigateurs increasingly upgrade or bloquer ces aussi.
Un chose que est pas mixed contenu: a plain lien (<a href="http://…">) à an
HTTP page. Que simplement navigates vous somewhere; il ne fait pas charger an insecure piece dans
votre secure page.
Comment corriger it
Le corriger est presque toujours le même: faire le insecure resource charger over HTTPS.
Modifier http:// à https:// dans le référence, or utiliser a chemin que ne fait pas difficile-code
le protocol à tout. La plupart de le temps le resource est déjà disponible over HTTPS —
quelqu’un simplement left an old http:// URL dans a template, a plugin, or le database.
Si vous vouloir a safety net pour n’importe quoi vous missed, vous pouvez ajouter a unique line de
configuration — le upgrade-insecure-requests header — que indique le navigateur à
quietly rewrite leftover http:// resource requêtes à https:// avant il sends
les. c’est a great backstop, mais c’est pas a raison à skip cleaning up le réel
source. Preuve à l’appui de cette affirmation The upgrade-insecure-requests CSP directive rewrites insecure URLs as secure URLs before requests are made. Portée : MDN documents the directive's rewriting behavior and limits; it does not guarantee that an HTTPS version of every resource exists. Niveau de confiance : élevé · Vérifié : MDN: CSP upgrade-insecure-requests
Vouloir le complet picture — le exact resource listes navigateurs bloquer, comment detect
mixed contenu à scale avec le DevTools console et CSP rapports, le
upgrade-insecure-requests et block-all-mixed-content directives, pourquoi votre CMS
garde reintroducing il, et comment mixed contenu interacts avec HSTS? Switch à le
Avancé tab.
TL;DR — Mixed contenu est an HTTPS page chargement a sub-resource over HTTP. Le actuel navigateur/W3C taxonomy sorts ce dans upgradable et blockable contenu; le older active/passive split (utilisé ci-dessous as a blast-radius framing) encore tracks que divide pour la plupart resource types, avec exceptions — CORS-enabled images,
srcset/picturecandidates, et IP-host requêtes sont blockable même though a plainimg srcest upgradable. Active (scripts, stylesheets, iframes,XMLHttpRequest/fetch, et n’importe quoi le navigateur executes) est bloqué — a tampered script peut rewrite lune page — donc c’est le launch-day regression à corriger premier. Passive (images, audio, video) historically chargé avec a downgraded indicator et est maintenant increasingly auto-upgraded or bloqué. Anchor liens et autre top-level HTTP navigation ne sont pas mixed contenu; aucun sont insecure downloads, qui sont a connexe mais séparé boundary. Detect il à travers three layers — récupéré source, rendu/runtime state, et réel utilisateur sessions — par exploration le HTTPS site, reading le Chrome DevTools console (exact wording est navigateur/version spécifique), or collectingContent-Security-Policy-Report-Onlyviolations; corriger il par confirming an HTTPS equivalent en réalité fonctionne, alors pointing chaque sub-resource àhttps://(relative/protocol-relative paths sont fine une fois vous avez verified ownership et base-URL behavior, pas a universal par défaut).Contenu-Security-Policy: upgrade-insecure-requêtesrewrites in-scopehttp://sub-resource requêtes (notamment cross-origin ones) àhttps://avant ils sont sent et avant mixed-contenu/CSP vérifications exécuter — a net, pas a substitute pour fixing le source, avec aucun HTTP fallback si le upgrade fails, et il fait pas upgrade top-level navigation à tiers origins, donc il ne fait pas remplacer HSTS. Putting le directive itself dans rapport-seulement mode est a aucun-op — monitor avec a séparé rapport-seulement policy à la place. CMS databases (back up et dry-exécuter quelconque replacement — naive string-remplacer peut corrupt serialized données), plugins, themes, service workers/caches, et ad/analytics balises sont le recurring re-offenders — audit à scale, pas page par page.
Le HTTPS hub introduces mixed contenu as un de le deux launch-day échec modes de a migration (le autre étant redirections). Ce est le deep dive il points à — le exact resource tiers, le detection stack, le CSP directives, et le operational raisons il garde coming back.
Ce que counts as mixed contenu — et ce que ne fait pas
Mixed contenu est scoped precisely: c’est à propos de sub-resources lune page charge, pas à propos de liens lune page contient. Google’s definition: “Une page a mixed contenu quand son initial HTML est chargé over a secure HTTPS connection, mais autre resources (tel as images, videos, stylesheets, et scripts) sont chargé over an insecure HTTP connection.” Preuve à l’appui de cette affirmation Mixed content occurs when a secure page loads resources over insecure HTTP, and browsers upgrade or block mixed-content requests by resource type. Portée : MDN documents current browser categories and behavior; individual browser versions may differ at the margins. Niveau de confiance : élevé · Vérifié : MDN: Mixed content
Le trap que reassures personnes falsely est le anchor balise. A <a href="http://…">
lien à an HTTP page est pas mixed contenu — il navigates à a nouveau document; il
ne fait pas charger an insecure resource dans le actuel secure un. c’est vrai de quelconque
top-level navigation à an HTTP page, pas simplement anchor clicks.
c’est encore worth sending outbound liens à HTTPS destinations. Sous le modern
navigateur-default Referrer-Policy (strict-origin-when-cross-origin), a click depuis
an HTTPS page à an HTTP destination fait drop le Referer header, qui peut mangle
referral analytics — mais que behavior est policy- et navigateur-dependent, pas a
universal règle: une page (or an upstream proxy/CDN) que sets a looser
Referrer-Policy peut encore send a referrer on que downgrade. Vérifier le réel
Referrer-Policy dans effect avant asserting comment beaucoup referral données a donné site
loses — mais dans quelconque cas, c’est a séparé problème depuis mixed contenu, pas mixed
contenu itself.
Active vs. passive: the distinction que sets votre priorities
Modern navigateur et W3C documentation classifies mixed contenu primarily as upgradable versus blockable contenu — resource types le navigateur va silently retry over HTTPS versus ones il refuses outright — plutôt que le older active/passive split. Active/passive est encore utile shorthand pour pourquoi navigateurs draw que line (comment beaucoup de lune page le resource pourrait compromise), et c’est comment Google’s propre explainer frames il, donc c’est kept ci-dessous as le principal triage framing — simplement ne pas treat il as le actuel official taxonomy quand vous devez raison à propos de a spécifique resource type; voir le exceptions après le deux listes.
Navigateurs classify mixed content by how beaucoup of lune page the insecure resource pourrait compromise. Google: “Active mixed content poses a supérieur threat que passive mixed content.” Que unique sentence devrait drive votre triage order.
«Active mixed content interacts with — and can take over — the whole page. Google describes it as “scripts, stylesheets, iframes, and any other code the browser can download and execute.” In practice the active list is: » (Traduction) (Résumé en français de la section vingt-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
<script src="http://…">— le worst cas; an intercepted script peut rewrite le entier DOM, exfiltrate formulaire données, or inject contenu.<link rel="stylesheet" href="http://…">— CSS peut hide, reposition, or overlay n’importe quoi, donc c’est treated as active.<iframe src="http://…">— an embedded insecure document à l’intérieur votre secure un.XMLHttpRequest/fetch()àhttp://— insecure données lune page alors acts on.- Web fonts,
<object>/<embed>resources, et le<link>variants que pull dans executable or layout-controlling contenu.
«Because a tampered active resource can rewrite the page, “Most browsers already block this type of content by default to protect users.” That’s why active mixed content is what visibly breaks things after a migration — a blocked stylesheet strips your CSS, a blocked script kills interactivity, a blocked iframe leaves a hole. Fix active first. It’s a functional bug, not just a security nag. » (Traduction) (Résumé en français de la section vingt-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Passive (display) mixed content — Google: “including images, video, and audio” — “doesn’t interact with the rest of the page.” An intercepted image can be swapped but can’t seize the document. So historically browsers loaded it and just downgraded the indicator: “Until recently, passive mixed content was loaded in all browsers, because blocking it would have broken many websites. This is now beginning to change.” The direction of travel across browsers is toward auto-upgrading passive resources to HTTPS where possible and blocking what can’t be upgraded, so “passive = harmless” is no longer a safe assumption to build on. » (Traduction) (Résumé en français de la section trente, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Exceptions le active/passive split ne fait pas capture
Le upgradable/blockable line a plusieurs exceptions que ne pas suivre le general “images upgrade, scripts block” modèle ci-dessus — ces sont le cas que en réalité trip personnes up En pratique:
- CORS-enabled image requêtes sont force-failed, pas upgraded. An ordinary
<img src="http://…">est upgradable, mais an image requête fait aveccrossorigindéfinir est treated differently par le mixed-contenu algorithm et fails au lieu de silently upgrading. srcsetet<picture>candidates sont blockable, pas upgradable. Le même image, requested via a responsive-image mechanism au lieu de a plainsrc, falls dans le blockable category — ne pas assume chaque image référence behaves le même façon.- IP-address hosts sont bloqué, pas upgraded, même pour an otherwise-upgradable
resource type. A référence comme
http://203.0.113.5/logo.pngne fait pas obtenir le automatic-upgrade treatment a domain-hosted equivalent voudrait. - Nested contexts et workers sont dans scope. Mixed-contenu vérifications appliquer à l’intérieur iframes et à l’intérieur service/shared workers aussi, pas simplement le top document — a worker fetching an insecure script est encore mixed contenu.
- Local et loopback origins ont leur propre nuance.
localhost, loopback addresses, etfile://contexts sont “potentially trustworthy origins” sous le spec même sans TLS, donc a simple HTTP-vs-HTTPS heuristic ne fait pas map cleanly sur local development environments. - Insecure downloads sont a connexe mais séparé boundary. A download initiated
depuis a secure page over
http://est a réel risque, mais c’est governed par son propre download-security handling, pas le sub-resource mixed-contenu règles dans ce section. - Top-level HTTP navigation encore n’est pas mixed contenu, notamment le anchor-lien cas ci-dessus — c’est a property de navigation, pas de a chargé sub-resource, cependant nombreux de ces autre exceptions appliquer.
Detecting mixed contenu — le entier stack
Là est aucun unique button, et chaque couche ci-dessous réponses a différent question — a clean résultat à un couche ne fait pas clair le others. Diagnose récupéré source (ce que le raw HTML en réalité références), rendu/runtime state (ce que le navigateur requêtes une fois c’est parsed lune page et exécuter son scripts), et réel utilisateur sessions (ce que se produit pour a visitor behind a consent banner, a geo-redirect, a login wall, or a tiers balise que seulement fires sous spécifique conditions) séparément. Couche ces depuis “un page” à “entier site”:
«1. The Chrome DevTools console (rendered/runtime state). Load the HTTPS page and open the console. Blocked active mixed content logs a message along the lines of “Mixed Content: The page … was loaded over HTTPS, but requested an insecure … This request has been blocked; the content must be served over HTTPS.” Passive that gets loaded logs a warning rather than a block. The Security panel (or the Issues tab) groups it up per page. Fast for spot-checks and for confirming a specific fix — but treat the exact message wording, panel layout, and even which resource types get blocked as browser- and version-specific; this was confirmed against Chrome as of 2026-07 and you should verify current wording on the actual browser/version you’re diagnosing rather than quoting it as a fixed UI string, and expect Firefox, Safari, and Edge to differ. » (Traduction) (Résumé en français de la section trente-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«2. A site crawler (fetched source, at scale). DevTools is per-page; a crawl is
site-wide. Ahrefs Site Audit and Screaming Frog both flag pages that reference
http:// sub-resources on an HTTPS site — the only realistic way to find mixed
content across thousands of URLs. This is the primary tool for an audit, but it’s
still reading source: a crawl passing clean doesn’t prove the rendered page or a
real session is clean too — record which browser/tool/version produced a given
result rather than reporting one unqualified pass/fail.
» (Traduction) (Résumé en français de la section trente-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«3. CSP violation reporting (real user sessions). You can make the browsers of
real visitors report mixed content back to you, which catches resources that
only load on certain pages, for certain users, under certain consent states, or
from third-party tags you don’t control — the layer neither a crawl nor a single
DevTools check can reach. web.dev: “You can use content security policy to
collect reports of mixed content on your site. To enable this feature, set the
Content-Security-Policy-Report-Only directive by adding it as a response header
for your site.” Report-Only mode reports violations without enforcing the
policy, so you can measure the problem in production before you turn on blocking.
(The mechanism is the modern report-to / Reporting-Endpoints header, or the
older report-uri. Note this is a different, general-purpose report-only policy
than upgrade-insecure-requests itself — putting that specific directive in
report-only mode doesn’t work, as covered below.)
» (Traduction) (Résumé en français de la section trente-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Use all three: DevTools to verify a rendered page, a crawler to inventory fetched source, CSP reports to catch the real-session long tail that only shows up in the wild. One crawl passing is evidence about the source, not a guarantee that every consent state, ad-tech variant, personalization branch, or worker is clean. » (Traduction) (Résumé en français de la section quarante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Fixing at the source » (Traduction) (Résumé en français de la section quarante et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«The real fix starts before you touch a single reference: verify the HTTPS equivalent actually exists, presents a valid certificate, and returns the content you expect — don’t assume swapping the scheme is safe just because the domain resolves. Once that’s confirmed, every sub-resource reference should resolve over HTTPS. Options below are in rough order of preference, but each one still depends on ownership and context, not just the string you type: » (Traduction) (Résumé en français de la section quarante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Absolute HTTPS URLs — change http://cdn.example.com/app.js to
https://cdn.example.com/app.js. Explicit and unambiguous; the safest default when
you’re not certain about the serving context below.
» (Traduction) (Résumé en français de la section quarante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Root-relative or relative paths — for resources you own on the same site,
/assets/app.js inherits the page’s scheme automatically. Google’s HTTPS guidance:
“Make sure intrasite URLs and external URLs don’t depend on a specific protocol.
Use relative paths or leave out the protocol as in //example.com/something.js.”
Treat this as conditional, not a universal recommendation: it only holds once
you’ve confirmed you actually own the resource (a relative path to a third-party
asset doesn’t make sense), that the page’s real base URL resolves the way you
expect (a <base> tag, a proxied path, or an embedded/AMP context can change what
“relative” means), and that nothing downstream reconstructs the URL in a way that
reintroduces http:// — client-side code building a URL from window.location or
a stored absolute value, for example.
» (Traduction) (Résumé en français de la section quarante-trois, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Protocol-relative URLs (//example.com/something.js) still work, but they’re
not the preferred universal fix — gate them on the same ownership/base-URL checks
above, not just habit. On an all-HTTPS web, an explicit https:// is usually
clearer and avoids surprises if the file is ever opened from a non-HTTP context;
reach for protocol-relative only where you have a specific reason not to hard-code
the scheme.
» (Traduction) (Résumé en français de la section quarante-trois, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«At scale you almost never hand-edit templates one by one — but don’t run an
unguarded database string-replacement against production either. http://yourdomain
→ https://yourdomain looks like a simple find-and-replace, and for plain-text
fields it often is safe, but CMS content can be serialized or structured (PHP
serialized arrays, JSON blobs, block-editor data) where a naive substring swap
corrupts the record instead of fixing it. Use application-aware tooling that
understands the serialization format, back up the database first, and
dry-run the replacement so you can review the affected rows before committing.
Then fix the handful of template/config files that emit the URLs; the crawler and
CSP reports mop up the stragglers.
» (Traduction) (Résumé en français de la section quarante-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## upgrade-insecure-requests: the safety net (and its limits)
» (Traduction) (Résumé en français de la section quarante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Le proactive backstop est a Contenu-Security-Policy directive. web.dev: “Le
upgrade-insecure-requests CSP directive instructs le navigateur à upgrade insecure
URLs avant making network requêtes.” Définir le header:
Content-Security-Policy: upgrade-insecure-requests«Per MDN, it “instructs user agents to treat all of a site’s insecure URLs (those served over HTTP) as though they have been replaced with secure URLs (those served over HTTPS).” Concretely, MDN says it upgrades: “requests to load resources (such as images, scripts, or fonts),” “navigation requests (such as link targets) which are same-origin with the document,” “navigation requests in nested browsing contexts, such as iframes,” and “form submissions.” Preuve à l’appui de cette affirmation The upgrade-insecure-requests CSP directive rewrites insecure URLs as secure URLs before requests are made. Portée : MDN documents the directive's rewriting behavior and limits; it does not guarantee that an HTTPS version of every resource exists. Niveau de confiance : élevé · Vérifié : MDN: CSP upgrade-insecure-requests » (Traduction) (Résumé en français de la section quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Deux operational details matter au-delà que citation. Premier, le sub-resource upgrade n’est pas limited à même-origin requêtes — c’est le navigation upgrade c’est même-origin-seulement per le citation ci-dessus; ordinary sub-resource requêtes obtenir rewritten à travers origins aussi, donc a CDN-hosted script or a tiers font obtient upgraded, pas simplement même-site assets. Deuxième, le rewrite se produit avant le navigateur’s mixed-contenu et CSP vérifications evaluate la requête, qui est pourquoi a resource que voudrait sinon être bloqué outright as mixed contenu peut charger cleanly une fois c’est été upgraded — le upgrade pre-empts le bloquer.
Three limites vous doit pas paper over:
- Il ne fait pas upgrade tiers top-level navigation. MDN: “Cependant, top-level
navigation requêtes whose cible est a différent origin ne va pas être upgraded.”
Parce que de que, il est explicitly pas a replacement pour HSTS: “Le
upgrade-insecure-requestsdirective ne va pas garantir que utilisateurs visiting votre site via liens on tiers sites va être upgraded à HTTPS pour le top-level navigation et thus ne fait pas remplacer leStrict-Transport-Security(HSTS) header.” (Plus on que split ci-dessous.) - c’est a net, pas a corriger, et il ne fait pas fall back. Si le resource genuinely
n’est pas disponible over HTTPS, le upgraded requête simplement fails outright — il fait
pas fall back à le original
http://version. Cleaning le source est encore le job; le directive covers ce que vous missed, pas qu’est-ce que genuinely broken. - Rapport-seulement mode ne fait pas perform le upgrade — c’est a aucun-op. Putting
upgrade-insecure-requestsà l’intérieur aContent-Security-Policy-Report-Onlyheader est ignored par le navigateur: rien obtient rewritten, et rien obtient reported pour il soit. Si vous vouloir visibility dans ce que le upgrade voudrait affecter avant vous enforce il, exécuter a séparé, general-purpose rapport-seulement policy que rapports disallowedhttp://destinations (le mêmedefault-src https:rapport-seulement approche utilisé pour detection ci-dessus) — vous pouvez’t obtenir que visibility par makingupgrade-insecure-requestsitself rapport-seulement.
block-all-mixed-content — mostly historical
il y a a companion directive, block-all-mixed-content, qui — per MDN —
“empêche loading tout assets over HTTP quand le page utilise HTTPS,” notamment “les deux
blockable et upgradable mixed contenu,” et s’applique à iframes aussi. En pratique c’est
été superseded. MDN marks il deprecated et “obsolete in the specification,”
noting: “Contenu que n’est pas bloqué est maintenant toujours upgraded à a secure connection, donc
ce directive n’est pas nécessaire.” Reach pour upgrade-insecure-requests; treat
block-all-mixed-content as legacy vous pourrait inherit, pas quelque chose à deploy nouveau.
Si vous déjà send upgrade-insecure-requests, block-all-mixed-content a
rien left à faire pour upgraded requêtes — le upgrade rewrite se produit premier, donc par
le temps a bloquer-tous vérifier voudrait exécuter, la requête a déjà été upgraded (or a
déjà failed). c’est pas simplement legacy; c’est redundant wherever UIR est déjà
deployed.
Pourquoi votre CMS garde reintroducing it
Mixed content isn’t a one-time cleanup — it recurs, parce que several systems quietly
re-inject http:// URLs après vous think you’re fait:
- Le contenu database. Dans WordPress, Drupal, et la plupart CMSes, editors paste
images et embeds avec absolute
http://URLs straight dans post bodies. Ceux actif dans le database, pas dans a template, donc a code-level corriger jamais touches les — hence le DB recherche-et-remplacer. - Themes et plugins. A theme or plugin que difficile-codes an
http://asset URL (a font, a script, a background image) reintroduces mixed contenu on chaque page il renders, et a plugin mettre à jour peut bring il back après vous avez cleaned il. - Ad tech, analytics, et tiers balises. Balise managers, ad networks, chat
widgets, et analytics extraits charger leur propre sub-resources — et si a vendor’s
balise encore calls
http://, c’est mixed contenu vous pouvez’t corriger dans votre propre codebase. Ce est exactly le long tail CSP reporting est pour; le durable corriger est pressing le vendor à servir over HTTPS (or dropping le balise). Si a vendor a aucun fonctionnement HTTPS endpoint, le durable choices sont le même three: obtenir les à corriger il, remplacer le dependency, or drop il — là n’est pas a fourth option que garde le insecure version running safely. - Service workers et caches. A service worker peut cache une réponse (or le
requête itself) que encore points à
http://, et il’ll garder diffusion que stale référence on repeat visits même après vous corriger le source. Reproduce a suspected corriger dans an incognito/uncached session avant concluding il n’a pas fonctionner, et faire certain a deploy que changements reURL sources aussi bumps le service worker/cache version donc stale entries obtenir evicted plutôt que replayed. - Difficile-coded
http://dans old contenu et email/print templates que obtenir reused.
Le operational takeaway: bake detection dans a recurring audit (robot d’exploration + CSP rapports), pas a launch-day liste de contrôle vous exécuter une fois.
Comment mixed contenu interacts avec HSTS
Mixed contenu et HSTS solve adjacent mais différent problèmes, et conflating les est a courant mistake:
upgrade-insecure-requestscorrections sub-resources votre propre secure page requêtes — il upgrades le images/scripts/iframes lune page pulls dans.- HSTS (
Strict-Transport-Security) forces le top-level navigation à votre site sur HTTPS — même le very premier requête, avant quelconque redirection fires — et defends contre SSL-stripping. Google frames HSTS as a façon à “éviter le coût de le 301 redirection” et à “defeat attacks comme SSL Stripping.”
Ils ne pas substitute pour chaque autre. As MDN spells out, upgrade-insecure-requests
“ne va pas garantir que utilisateurs visiting votre site via liens on tiers sites va
être upgraded à HTTPS pour le top-level navigation et thus ne fait pas remplacer le
Strict-Transport-Security (HSTS) header.” A entièrement hardened setup utilise les deux:
upgrade-insecure-requests (or clean URL sources) donc le secure page a aucun insecure
cargo, et HSTS donc nobody reaches le site over HTTP dans le premier placer. Et le
usual HSTS caution encore s’applique — Google: “ne pas enable HSTS jusqu’à vous êtes certain
votre site operation est robust suffisant à éviter ever deploying HTTPS avec certificate
validation erreurs,” et preloading est fermer à a un-way door.
Fait mixed content hurt SEO directement?
Lead avec le direct effects, parce que ils sont le ones vous en réalité contrôler: mixed contenu est premier a security et functional problème. Bloqué active mixed contenu breaks rendu et interactivity outright — a manquant stylesheet or script est a réel regression regardless de ce que a moteur de recherche rend de il. c’est raison suffisant à corriger il avant vous think à propos de rankings à tout.
Le SEO consequences sont réel mais conditional, pas direct or guaranteed. Actuel
official Google guidance ne fait pas establish fixing mixed contenu as a direct classement
boost — le HTTPS classement signal itself est scheme-based (si l’URL commence avec
https://), pas a sub-resource cleanliness vérifier, donc a stray insecure image ne fait pas
par itself coût vous “le HTTPS signal.” Mais downstream effects peut encore montrer up
selon qu’est-ce que en réalité broken: si Googlebot renders une page whose CSS or JS était
bloqué as mixed contenu, il peut indexer a broken or incomplete version; a downgraded
security indicator peut hurt utilisateur confiance, engagement, et conversions même avec aucun
classement modifier à tout; et Google’s general preference pour HTTPS canonicals est
itself conditional — invalide certificates, insecure dependencies,
HTTPS-à-HTTP redirections, or conflicting canonical signaux elsewhere on lune page peut
tout modifier qui URL obtient choisi, independent de mixed contenu précisément. Treat
rendu, indexation, canonicalization, et analytics effects as choses à vérifier on
votre propre pages, pas universal résultats à promise — et corriger mixed contenu pour le
security et functional raisons premier.
Ce sits à l’intérieur le broader HTTPS pour le SEO topic, qui covers le migration playbook, le classement-signal weight, et HSTS dans complet; si vous êtes aussi debugging le certificate itself (chain erreurs, expiry, DV/OV/EV), c’est a sibling deep dive.
AI summary
A condensed prendre on the Avancé version:
- Mixed contenu = an HTTPS page chargement a sub-resource over HTTP. c’est à propos de resources lune page charge, pas liens il contient — an anchor à an HTTP page (or quelconque top-level HTTP navigation) est pas mixed contenu, et aucun est an insecure download (a connexe mais séparé boundary).
- Actuel taxonomy est upgradable/blockable; active/passive est le older mais encore-
utile blast-radius framing. Active (scripts, stylesheets, iframes,
XMLHttpRequest/fetch— n’importe quoi le navigateur executes) est bloqué parce que a tampered script peut rewrite lune page; c’est le launch-day regression, corriger il premier. Passive (images, audio, video) historically chargé avec a downgraded padlock et est maintenant increasingly auto-upgraded or bloqué. Exceptions à le general modèle: CORS-enabled image requêtes sont force-failed plutôt que upgraded,srcset/<picture>candidates sont blockable (pas upgradable) comme plainimg srcest, IP-address hosts sont bloqué plutôt que upgraded, et nested contexts/workers et local/loopback origins ont leur propre nuances. - Detect à travers three layers, pas un: récupéré source (a robot d’exploration comme Ahrefs
Site Audit or Screaming Frog, site-wide), rendu/runtime state (le Chrome
DevTools console/Security panel, per-page — exact wording est navigateur/version
spécifique, confirmed contre Chrome as de 2026-07), et réel utilisateur sessions
(
Content-Security-Policy-Report-Onlyviolation rapports, le production long tail notamment tiers balises et consent-gated resources). A clean résultat à un couche ne fait pas clair le others. - Corriger à le source, après verifying le HTTPS equivalent en réalité fonctionne: point
chaque sub-resource à
https://; relative/protocol-relative paths sont fine seulement une fois vous avez verified ownership et lune page’s réel base-URL behavior, pas a par défaut. À scale, back up le database et dry-exécuter quelconque replacement — naive string-remplacer peut corrupt serialized/structured CMS données — alors corriger le remaining template/config fichiers. Watch pour service workers/caches replaying stalehttp://références après le source est fixed. upgrade-insecure-requests(a CSP header) rewrites dans-scopehttp://sub-resource requêtes — notamment cross-origin ones — àhttps://avant ils sont sent et avant mixed-contenu/CSP vérifications exécuter, a safety net avec aucun HTTP fallback si le upgrade fails. Il fait pas upgrade top-level navigation à tiers origins, donc il est pas a replacement pour HSTS, et putting le directive itself dans rapport-seulement mode est a aucun-op — monitor avec a séparé rapport-seulement policy à la place.block-all-mixed-contentest deprecated/obsolete, et redundant une foisupgrade-insecure-requestsest deployed (le upgrade exécute premier, donc bloquer-tous a rien left à bloquer).- Il recurs parce que le CMS database, themes/plugins, service workers/caches, et
ad/analytics balises garder reintroducing
http://URLs — audit on a schedule, pas une fois. - SEO impact est conditional, pas direct: actuel Google guidance ne fait pas establish a direct classement boost depuis fixing mixed contenu, et le HTTPS signal est scheme-based. Mais bloqué active resources peut faire Googlebot rendre/indexer a broken page, le padlock downgrade coûts confiance, et Google’s HTTPS-canonical preference est itself conditional on choses comme certificate validity et conflicting signaux — pas a guarantee tied à mixed contenu précisément.
«## Official documentation » (Traduction) (Résumé en français de la section soixante-treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Primary-source documentation from Google and the browser/standards teams. » (Traduction) (Résumé en français de la section soixante-quatorze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google / web.dev
» (Traduction) (Résumé en français de la section soixante-quinze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- What is mixed content? — the definition, and the active vs. passive split with browser behavior.
» (Traduction) (Résumé en français de la section soixante-quinze, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Fixing mixed content — finding it, fixing sub-resource URLs, upgrade-insecure-requests, and CSP reporting.
» (Traduction) (Résumé en français de la section soixante-quinze, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Enable HTTPS on your servers — relative/protocol-relative URLs, the HTTP <iframe> note, and HSTS guidance.
» (Traduction) (Résumé en français de la section soixante-quinze, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Preventing mixed content is one part of Google’s HTTPS guidance — the surrounding site-move/migration playbook mixed content fixes sit inside.
» (Traduction) (Résumé en français de la section soixante-quinze, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«MDN / standards
» (Traduction) (Résumé en français de la section soixante-seize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- CSP: upgrade-insecure-requests — what it upgrades, what it doesn’t, and why it doesn’t replace HSTS.
» (Traduction) (Résumé en français de la section soixante-seize, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- CSP: block-all-mixed-content — the deprecated/obsolete blocking directive.
» (Traduction) (Résumé en français de la section soixante-seize, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- MDN — Mixed content — the browser-behavior reference for blockable vs. upgradable content.
» (Traduction) (Résumé en français de la section soixante-seize, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Content Security Policy (CSP) — the header these directives live in, including reporting.
» (Traduction) (Résumé en français de la section soixante-seize, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Quotes from the source » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
On-le-record definitions depuis Google’s web.dev et le MDN standards docs. Chaque lien est a deep lien que jumps à le quoted passage où le plateforme prend en charge il.
Google / web.dev — ce que mixed content is
«- “A page has mixed content when its initial HTML is loaded over a secure HTTPS connection, but other resources (such as images, videos, stylesheets, and scripts) are loaded over an insecure HTTP connection.” Source » (Traduction) (Résumé en français de la section quatre-vingt-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “Active mixed content poses a greater threat than passive mixed content.” Source » (Traduction) (Résumé en français de la section quatre-vingt-deux, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Active mixed content “includes scripts, stylesheets, iframes, and any other code the browser can download and execute,” and “Most browsers already block this type of content by default to protect users.” Source » (Traduction) (Résumé en français de la section quatre-vingt-deux, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- Passive mixed content, “including images, video, and audio,” “doesn’t interact with the rest of the page.” And: “Until recently, passive mixed content was loaded in all browsers, because blocking it would have broken many websites. This is now beginning to change.” Source » (Traduction) (Résumé en français de la section quatre-vingt-deux, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
Google / web.dev — detecting et fixing
- “Vous peut utiliser contenu security policy à collect rapports de mixed contenu on votre site. À enable ce fonctionnalité, set le
Content-Security-Policy-Report-Onlydirective par adding il as a réponse header pour votre site.” Source - “Le
upgrade-insecure-requestsCSP directive instructs le navigateur à upgrade insecure URLs avant making network requêtes.” Source - “Assurez-vous intrasite URLs et external URLs ne pas depend on a spécifique protocol. Utiliser relative paths or laisser out le protocol as dans
//example.com/something.js.” Source
MDN — upgrade-insecure-requests and its limites
«- “The HTTP Content-Security-Policy (CSP) upgrade-insecure-requests directive instructs user agents to treat all of a site’s insecure URLs (those served over HTTP) as though they have been replaced with secure URLs (those served over HTTPS).”
Source
» (Traduction) (Résumé en français de la section quatre-vingt-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “However, top-level navigation requests whose target is a different origin will not be upgraded.”
Source
» (Traduction) (Résumé en français de la section quatre-vingt-six, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “The upgrade-insecure-requests directive will not ensure that users visiting your site via links on third-party sites will be upgraded to HTTPS for the top-level navigation and thus does not replace the Strict-Transport-Security (HSTS) header.”
Source
» (Traduction) (Résumé en français de la section quatre-vingt-six, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
MDN — block-all-mixed-content is legacy
«- “The HTTP Content-Security-Policy (CSP) block-all-mixed-content directive prevents loading any assets over HTTP when the page uses HTTPS.” But it is marked deprecated and “obsolete in the specification,” because “Content that isn’t blocked is now always upgraded to a secure connection, so this directive is not needed.”
Source
» (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Mixed-content checklist
Run ce during and après an HTTP→HTTPS migration, alors on a recurring basis:
Trouver il
- Chargé clé templates (home, produit, article, checkout) over HTTPS avec le Chrome DevTools console ouvrir et noted chaque “Mixed Content” message.
- Ran a complet explorer (Ahrefs Site Audit or Screaming Frog) et pulled le liste
de pages referencing
http://sub-resources. - Définir
Content-Security-Policy-Report-Onlyavec a reporting endpoint à catch le production long tail (per-utilisateur, per-page, et tiers balises).
Corriger il (active premier)
- Tout active références fixed:
<script>,<link rel="stylesheet">,<iframe>,fetch/XMLHttpRequest, fonts — ces sont bloqué, donc ils break lune page. - Tout passive références fixed:
<img>,<audio>,<video>, et leur<source>/poster URLs. - CMS database replacement (
http://yourdomain→https://yourdomain) pour pasted contenu — backed up, dry-exécuter avec application-aware tooling, pas a raw string-remplacer contre serialized/structured champs. - Theme/plugin difficile-coded
http://asset URLs trouvé et patched. - Service worker/cache entries reproduced dans an uncached session, et le
cache/service-worker version bumped donc stale
http://références ne pas replay. - Tiers balises (ads, analytics, chat, embeds) confirmed à charger over HTTPS — or le vendor pushed / le balise dropped.
Backstop et vérifier
-
Content-Security-Policy: upgrade-insecure-requestsheader définir as a safety net (understanding il fait pas remplacer HSTS). - Re-exploré et re-checked le console — zero bloqué active resources, clean padlock on le vérifié pages.
- Mixed-contenu detection ajouté à le recurring audit, pas simplement le launch liste de contrôle (plugin mises à jour et nouveau contenu reintroduce il).
Qui fix fait ce mixed-content cas besoin?
Fonctionner bas from the symptom.
Is the insecure chose a resource lune page loads, or a lien lune page contient?
- A lien (
<a href="http://…">) → pas mixed content. Leave it (optionally point it at HTTPS pour referral-data cleanliness). Arrêter ici. - A chargé resource (script, style, iframe, image, font, media,
fetch) → garder going.
Est le resource disponible over HTTPS?
- Oui, et vous avez verified il (valide cert, renvoie le prévu contenu) →
modifier le référence à
https://(le sûr par défaut), or a relative / protocol-relative chemin seulement si vous propre le resource et ont vérifié lune page’s base-URL behavior. Ce est le réel corriger. Fait. - Aucun / unsure → est il premier-party (votre propre asset)?
- Premier-party → servir il over HTTPS (c’est votre serveur; vous pouvez). Alors corriger le référence as ci-dessus.
- Tiers (a vendor balise, ad, embed) → demander le vendor pour an HTTPS endpoint;
si ils ne pas ont un, remplacer or drop le balise.
upgrade-insecure-requestsva essayer à upgrade il, mais si le vendor a aucun HTTPS version le upgraded requête simplement fails.
Is it active or passive?
- Active (script / stylesheet / iframe /
fetch/ font) → highest priority — it’s blocked, so lune page is functionally broken jusqu’à vous fix it. - Passive (image / audio / video) → fix it aussi, but it’s lower urgency (padlock downgrade / possible future block, pas an immediate break).
Do vous vouloir a safety net pour whatever vous missed?
- Définir
Content-Security-Policy: upgrade-insecure-requests. Remember: net, pas substitute — and it doesn’t cover third-party top-level navigation, so it is pas a stand-in pour HSTS.
Faire vous aussi besoin à force le top-level page sur HTTPS pour premier-time / tiers referrals?
- c’est HSTS, a séparé contrôler. Ajouter
Strict-Transport-Security— mais seulement une fois votre certificate operation est rock-solid, parce que HSTS (surtout preload) est fermer à a un-way door.
The mental models
1. Resources, pas liens. Mixed contenu est à propos de ce que le secure page charge, jamais à propos de où il liens. Si vous pouvez’t decide si quelque chose counts, demander: fait le navigateur récupérer ce à construire le actuel page? Oui → possible mixed contenu. Il simplement takes me à un autre page → pas mixed contenu.
2. Triage par ce que le navigateur fait, pas par severity dans le abstract. Active (scripts, styles, iframes) est bloqué → c’est a functional bug, corriger premier. Passive (images, media) est warned/upgraded → corriger suivant. Le navigateur’s propre behavior est votre priority queue.
3. Detection est a funnel: vérifier → inventory → catch le tail. DevTools console (un page, exact), robot d’exploration (entier site, le bulk), CSP rapports (production, tiers, per-utilisateur long tail). Aucun unique outil voit tout three.
4. Corriger le source; net le rest.
Clean le réel URLs — DB, templates, balises. Alors ajouter
upgrade-insecure-requests as a backstop pour ce que slips via. Le directive est
insurance, pas a repair.
5. Deux différent “force HTTPS” jobs, deux différent outils.
upgrade-insecure-requests upgrades le sub-resources votre secure page requêtes.
HSTS forces le top-level navigation à votre site sur HTTPS. Ils ne pas
overlap et un jamais remplace le autre — a hardened site utilise les deux.
6. c’est a recurring audit, pas a un-time task.
Le CMS database, plugin/theme mises à jour, et tiers balises garder reintroducing
http://. Treat detection as a scheduled sweep, or il silently comes back.
Mixed-content anti-patterns
Mistakes que leave insecure content live — or paper over it au lieu de fixing it.
- Treating
upgrade-insecure-requestsas le corriger. c’est a net. Si le resource a aucun HTTPS version le upgraded requête fails, et vous avez hidden a broken dependency au lieu de resolving il. Clean l’URL sources; utiliser le directive pour le tail. - Assuming a code deploy cleaned le database. Dans a CMS, la plupart
http://image et embed URLs actif dans contenu lignes, pas templates. A template corriger laisse chaque old post mixed. Exécuter le DB recherche-et-remplacer. - Deprioritizing active mixed contenu parce que “it’s just a warning.” Il n’est pas — active est bloqué. A bloqué stylesheet or script est a functional outage, pas a cosmetic nag.
- Spot-checking le homepage et appel il fait. Mixed contenu hides on produit pages, old blog posts, et paths seulement some utilisateurs hit. Explorer le entier site et utiliser CSP reporting pour ce que le explorer ne peut pas reach.
- Ignoring tiers balises. An ad, analytics, or chat vendor encore appel
http://est mixed contenu vous pouvez’t corriger dans votre propre repo. Chasing il dans votre codebase forever est wasted effort — push le vendor or drop le balise. - En utilisant
block-all-mixed-contenton a nouveau construire. c’est deprecated et obsolete. Reach pourupgrade-insecure-requestsà la place. - Confusing
upgrade-insecure-requestsavec HSTS. Un upgrades sub-resources; le autre forces top-level HTTPS et defends contre SSL stripping. Shipping un et assuming vous avez covered le autre laisse a réel gap. - Leaving detection out de le recurring audit. Fixing il une fois et jamais checking
à nouveau guarantees a plugin mettre à jour or a pasted
http://image brings il back unnoticed.
Mixed content — cheat sheet
Active vs. passive
| Type | Exemple resources | Navigateur behavior | Priority |
|---|---|---|---|
| Active | <script>, <link rel="stylesheet">, <iframe>, fetch/XMLHttpRequest, fonts, <object> | Blocked — breaks lune page | Fix premier |
| Passive | <img>, <audio>, <video> and leur sources | Warns / downgrades padlock; increasingly auto-upgraded or blocked | Fix suivant |
Anchor lien <a href="http://…"> | (a navigation, pas a sub-resource) | Pas mixed content at tout | N/A |
Detection stack
«| Layer | Tool | Sees |
| --- | --- | --- |
| Per page | Chrome DevTools console / Security panel | Exact blocked + warned resources on the open page |
| Whole site | Ahrefs Site Audit, Screaming Frog | Every page referencing http:// sub-resources |
| Production tail | Content-Security-Policy-Report-Only + reporting endpoint | Per-user, per-page, and third-party-tag violations |
» (Traduction) (Résumé en français de la section cent vingt-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«The CSP directives » (Traduction) (Résumé en français de la section cent vingt-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«| Directive | What it does | Status |
| --- | --- | --- |
| upgrade-insecure-requests | Rewrites in-scope http:// sub-resource requests to https:// before sending | Current — the one to use |
| block-all-mixed-content | Blocks all HTTP assets on an HTTPS page | Deprecated / obsolete |
| Content-Security-Policy-Report-Only | Reports violations without enforcing | Current — use to measure first |
» (Traduction) (Résumé en français de la section cent vingt-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Don’t-confuse-these
| Corrections | Scope | |
|---|---|---|
upgrade-insecure-requests | Sub-resources le secure page charge | Même-origin + dans-scope; pas tiers top-level nav |
HSTS (Strict-Transport-Security) | Top-level navigation à votre site | Forces HTTPS même on premier requête; pas a mixed-contenu corriger |
One-liner fix (CMS): DB search-and-replace http://yourdomain → https://yourdomain, alors patch templates/plugins, alors définir upgrade-insecure-requests.
Trouver mixed content — snippets
1. Explorer un page depuis le command line
Grab une page et flag quelconque insecure src/href sub-resources left dans le HTML.
macOS / Linux
# Flag insecure script/img/link/iframe/source references on a single URL
curl -s https://example.com/ \
| grep -Eo '(src|href)="http://[^"]+"' \
| sort -uWindows (PowerShell)
(Invoke-WebRequest -Uri "https://example.com/").Content `
| Select-String -Pattern '(src|href)="http://[^"]+"' -AllMatches `
| ForEach-Object { $_.Matches.Value } | Sort-Object -UniqueCe seulement voit le raw HTML — resources injected par JavaScript ne va pas montrer up, qui est exactly pourquoi vous aussi utiliser DevTools et a réel robot d’exploration.
2. Chrome DevTools Console — liste insecure resources on the rendered page
Paste dans le console on le HTTPS page à catch même JS-inserted références:
// Every element with an http:// resource attribute in the live DOM
[...document.querySelectorAll('[src],[href],[srcset],[data-src]')]
.filter(el => /^http:\/\//.test(
el.src || el.href || el.getAttribute('srcset') || el.getAttribute('data-src') || ''
))
.map(el => ({ tag: el.tagName, url: el.src || el.href }));Le navigateur aussi logs blocked active mixed content on its propre as
Mixed Content: … Ce requête has been blocked; le contenu doit be served over HTTPS. — lire ceux premier.
3. Bookmarklet — un-click console dump
Enregistrer as a bookmark; click it on quelconque HTTPS page to console-log its http://
références:
javascript:(()=>{const h=[...document.querySelectorAll('[src],[href]')].filter(e=>/^http:\/\//.test(e.src||e.href)).map(e=>e.src||e.href);console.log('%cMixed content candidates:','font-weight:bold',h.length);h.forEach(u=>console.log(u));})();4. Turn on CSP reporting (detect dans production)
Ajouter a rapport-seulement header donc réel visitors’ navigateurs tell vous à propos de violations — notamment tiers balises et pages votre explorer misses:
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-report-endpointRapport-seulement rapports sans enforcing, donc vous pouvez size le problème safely avant
switching on upgrade-insecure-requests or enforcement. (Le modern equivalent utilise
report-to avec a Reporting-Endpoints header.)
5. Le safety-net header (une fois vous avez fixed le source)
Content-Security-Policy: upgrade-insecure-requestsRemember il ne fait pas upgrade tiers top-level navigation et est pas a replacement pour HSTS.
Recurring mixed-content audit SOP
Run ce après HTTPS launches, CMS or theme releases, tag-manager changements, and on a regular schedule pour sites whose content changements frequently.
- Explorer HTTPS pages dans raw et rendu modes. Export insecure URLs depuis
src,srcset, stylesheet, iframe, media, et récupérer/XHR requêtes; ordinary HTTP anchor liens ne sont pas mixed contenu. - Collect navigateur evidence. Examiner DevTools on representative templates et utiliser
Content-Security-Policy-Report-Onlyà capture violations triggered par réel visitors et tiers balises. - Classify chaque finding. Mark il active or passive, premier-party or tiers, static or JavaScript-injected, et identifier le template, database champ, plugin, balise, or vendor que owns le source.
- Corriger le source référence. Point il à a fonctionnement HTTPS resource or a sûr
relative URL. Ne faites pas assume modification
http://àhttps://est suffisant; vérifier le destination en réalité prend en charge TLS. - Utiliser CSP as a safety net. Ajouter
upgrade-insecure-requestsseulement après reviewing le findings. Il peut reduce exposure, mais il ne fait pas repair le CMS record or remplacer HSTS. - Re-explorer et rendre. Active mixed-contenu erreurs devrait être zero on testé templates; passive resources devrait aussi resolve over HTTPS sans fallback.
- Empêcher recurrence. Correct le originating template or editor workflow, retain rapport-seulement collection où appropriate, et assign nouveau violations à le système owner.
Symptom → probable causer → fix
| Symptom | Probable causer | Ce que à inspect | Corriger |
|---|---|---|---|
| Page loses layout or interaction après HTTPS launch | Bloqué active contenu, généralement a stylesheet, script, iframe, or récupérer requête | DevTools Console et Network erreurs on le affected template | Déplacer le resource à a valide HTTPS URL et correct le source template or balise |
| Padlock or security indicator est downgraded pendant que lune page encore semble usable | Passive image, audio, video, or autre upgradable contenu | Rendu DOM, srcset, lazy-charger attributs, CSS, et navigateur warnings | Remplacer chaque insecure resource référence et vérifier le HTTPS asset renvoie successfully |
| Problème renvoie après a CMS release | An absolute HTTP URL remains dans le database, theme, plugin, or generated contenu | Comparer nouveau violations par template et deployment; recherche stored champs et configuration | Corriger le generator or stored valeur, alors backfill affected contenu |
| Explorer est clean mais réel utilisateurs encore rapport échecs | JavaScript, consent logic, ad tech, or a tiers balise injects la requête seulement à runtime | CSP rapport-seulement events et DevTools avec le pertinent consent/device state | Modifier or supprimer le responsible balise/vendor configuration et retest que state |
upgrade-insecure-requests est présent mais a resource encore fails | Le HTTP origin a aucun fonctionnement HTTPS equivalent, or le policy ne fait pas cover que navigation | Upgraded requête’s final URL, certificate, et réponse | Host le asset on HTTPS or remplacer il; ne faites pas treat le directive as a proxy |
Mixed-content release tests
Tester 1: rendered template sweep
- Objectif: Catch active et passive resources que raw HTML alone misses.
- Méthode: Rendre a representative URL depuis chaque template et interaction state; inspect Console et Network sortie pour insecure or bloqué requêtes.
- Attendu résultat: Aucun sub-resource est requested over HTTP et aucun active contenu est bloqué.
- Échec trigger: Quelconque mixed-contenu warning, auto-upgrade échec, or manquant layout/function caused par a bloqué resource.
- Suivant action: Trace la requête à son template, balise, plugin, or stored champ; corriger le source et rerun le sweep.
Tester 2: source and CSP comparison
- Objectif: Detect violations introduced seulement pour réel visitors or par third parties.
- Méthode: Comparer robot d’exploration findings avec
Content-Security-Policy-Report-Onlyevents, grouped par bloqué URL, page template, directive, et owner. - Attendu résultat: Aucun unexplained production-seulement violations remain; connu noise est documented et excluded narrowly.
- Échec trigger: A repeatable violation absent depuis le explorer or an unowned tiers source.
- Suivant action: Reproduce le visitor state et correct or supprimer le injecting integration.
Tester 3: recurrence tester après publishing
- Objectif: Vérifier le CMS ne … plus generates nouveau insecure références.
- Méthode: Publish a tester élément via le normal editorial workflow, alors explorer et rendre il avec le même vérifications utilisé pour production.
- Attendu résultat: Generated markup et chargé resources utiliser valide HTTPS URLs.
- Échec trigger: Le nouveau page recreates an HTTP référence previously cleaned depuis older contenu.
- Suivant action: Corriger le editor par défaut, template, plugin, or contenu transform avant le release proceeds.
Ressources utiles
Mon speaking
- Meilleur Sûr Que Sorry avec HTTPS — SMX East 2016 (SlideShare) — mon deep-dive on TLS, courant HTTPS implementation échecs, et le migration gotchas que produce mixed contenu dans le premier placer. (Standing disclaimer: c’est mon understanding de ces systèmes, et le adoption stats dans il sont depuis 2016.)
Mon connexe writing
- Le Beginner’s Guide à SEO technique — où HTTPS et mixed contenu fit dans le bigger technique picture.
Depuis autour le industry
- Ce que est mixed contenu? (web.dev / Google) — le canonical definition et le active-vs-passive split.
- Fixing mixed contenu (web.dev / Google) — le étape-par-étape: finding il, fixing sub-reURL sources,
upgrade-insecure-requests, et CSP reporting. - MDN —
upgrade-insecure-requests— precisely ce que il upgrades, ce que il ne fait pas, et pourquoi il ne fait pas remplacer HSTS. - MDN —
block-all-mixed-content— le deprecated blocking directive, pour quand vous inherit il. - MDN — Mixed contenu — le navigateur-behavior référence pour blockable vs. upgradable resources.
- Enable HTTPS on votre serveurs (web.dev / Google) — relative/protocol-relative URLs et le surrounding HTTPS setup guidance.
Stats worth citing
«- Active mixed content is blocked by default. Google: “Most browsers already
block this type of content by default to protect users.” — the reason active
mixed content is a functional outage, not a warning.
Source
» (Traduction) (Résumé en français de la section cent quatre-vingt-un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Active mixed content is the greater threat. Google’s own ranking of the two
tiers: “Active mixed content poses a greater threat than passive mixed content.”
— right-sizes your triage order.
Source
» (Traduction) (Résumé en français de la section cent quatre-vingt-un, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Passive mixed content is no longer safely “allowed.” Google: “Until recently,
passive mixed content was loaded in all browsers … This is now beginning to
change.” — the “images are harmless” assumption is expiring.
Source
» (Traduction) (Résumé en français de la section cent quatre-vingt-un, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- upgrade-insecure-requests is not a substitute for HSTS. MDN states it plainly:
it “does not replace the Strict-Transport-Security (HSTS) header.” — the two
controls solve different halves of the problem.
Source
» (Traduction) (Résumé en français de la section cent quatre-vingt-un, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- ~89% of the web is on HTTPS (W3Techs, 2026; confirm the current figure), which
is exactly why leftover http:// sub-resources on an otherwise-secure page are the
common failure mode now — the pages are HTTPS; the cargo lags behind. Context via
the HTTPS hub.
» (Traduction) (Résumé en français de la section cent quatre-vingt-un, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
Testez vos connaissances: Mixed Content
Five rapide questions on mixed content. Pick an réponse pour chaque, alors vérifier.
Journal des modifications
Mis à jour le 17 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.