Mixed Content happens when an HTTPS page loads HTTP resources (images, scripts, iframes). Chrome blocks active (scripts/iframes) fully, passive (images) triggers a warning. Fix: replace every http:// with https:// or // (protocol-relative), or set Content-Security-Policy: upgrade-insecure-requests.
Below: step-by-step, working examples, common pitfalls, FAQ.
http://cdn.old.com → https://cdn.old.comUPDATE wp_posts SET post_content = REPLACE(post_content, "http://example.com", "https://example.com")Content-Security-Policy: upgrade-insecure-requests; — upgrades HTTP → HTTPS automatically| Scenario | Config / Record |
|---|---|
| nginx: CSP upgrade-insecure-requests | add_header Content-Security-Policy "upgrade-insecure-requests;" always; |
| Apache: .htaccess | Header set Content-Security-Policy "upgrade-insecure-requests;" |
| HTML meta fallback | <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests;"> |
| Protocol-relative URL | <img src="//cdn.example.com/logo.png"> (works on both HTTP and HTTPS) |
| WordPress plugin | Really Simple SSL — auto-replace + HSTS |
<a href="http://..."> is not mixed content, but UX suffers — replace everythingXMLHttpRequest to HTTP endpoints is blocked silently — verify manuallyMixed Content is loading HTTP resources (images, scripts, CSS) on an HTTPS page. Browsers block active mixed content (JS, CSS) and warn about passive (images).
Find all HTTP resources on the page: scripts, styles, images, frames.
Divide into active (critical) and passive (non-critical) mixed content.
Each HTTP resource listed with type and fix recommendation.
Results in seconds — we check the page without full browser rendering.
post-HTTPS migration audit
insecure resource detection
browser warning fixes
third-party resource audit
// scheme everywhere to adapt to protocol.Content-Security-Policy: upgrade-insecure-requests automatically upgrades HTTP to HTTPS.src="/images/logo.png" instead of src="http://example.com/images/logo.png".Mixed content check history and HTTPS security monitoring.
Sign up freeActive — scripts, iframes, stylesheets, XHR — can execute code with the HTTPS page's privileges. Chrome blocks entirely. Passive — images, audio, video — only displayed. Warning but not blocked.
Per-site in Chrome: Settings → Privacy → Site settings → Insecure content → Allowed for specific site. Dangerous in production — use only for dev.
Chrome 43+, Firefox 42+, Safari 10.1+. IE does not support it, but modern browsers cover 98% of traffic.
CMS plugin for auto-replace on save (WordPress: Really Simple SSL), Git pre-commit hook for content, CSP-report monitoring in production.