Mixed Content.
Loading HTTP resources on HTTPS pages weakens encryption and triggers browser warnings
What does this check test?
Mixed content occurs when an HTTPS page loads sub-resources (scripts, stylesheets, images, iframes, fonts, AJAX requests) over insecure HTTP connections. Browsers classify mixed content as either 'active' (scripts, stylesheets, iframes — which can alter the page) or 'passive' (images, audio, video — which cannot modify the DOM). Modern browsers block active mixed content entirely and may warn about or block passive mixed content. This check identifies any HTTP resource loads on HTTPS pages.
Why does it matter?
Mixed content undermines the security guarantees of HTTPS. An attacker on the network can intercept and modify HTTP resources in transit. If a script is loaded over HTTP, an attacker can replace it with malicious code that executes in the security context of the HTTPS page, effectively bypassing encryption for the entire session. Even passive mixed content like images can be swapped to display misleading information (e.g., changing a bank balance display). Browsers increasingly block mixed content, so it also causes functionality issues.
Who is affected?
Any site that has migrated from HTTP to HTTPS but still references HTTP resources is affected. This commonly occurs with legacy content, hardcoded URLs in databases, user-generated content with absolute HTTP URLs, third-party widgets that default to HTTP, and CDN resources not updated to HTTPS. Sites with large content databases (CMSs, e-commerce catalogs) are most likely to have lingering HTTP references.
Where does this apply?
Open your browser's DevTools Console — mixed content warnings and errors are logged automatically. The Network tab shows the protocol for each resource. You can also use the `Content-Security-Policy: upgrade-insecure-requests` header to automatically upgrade HTTP requests to HTTPS. Check for HTTP URLs in `<script src>`, `<link href>`, `<img src>`, `<iframe src>`, CSS `url()` values, and AJAX/fetch calls.
How to fix it
<!-- Bad: HTTP resource on HTTPS page -->
<script src="http://cdn.example.com/lib.js"></script>
<img src="http://images.example.com/logo.png">
<!-- Good: HTTPS or protocol-relative -->
<script src="https://cdn.example.com/lib.js"></script>
<img src="https://images.example.com/logo.png"> Content-Security-Policy: upgrade-insecure-requests content stored in databases, run a migration to update URLs
UPDATE posts SET content = REPLACE(content, 'http://cdn.example.com', 'https://cdn.example.com'); References
AppVet checks Mixed Content automatically
Run a free security scan and get a full report with actionable fixes, including a Fix with AI prompt you can paste into any coding tool.
Run Audit