Troubleshooting guide · dns-ssl · Published 2026-08-15 · 4 min read

Mixed content warnings and how to fix them

What mixed content warnings mean, which resources browsers block, and the step by step fix for every http request on an https page.

Symptoms

The page loads over https, the padlock bar still appears, but the browser warns "Mixed Content" and some images, scripts, fonts, or embed frames either never load or are replaced. In Firefox the padlock starts with a warning symbol; Chrome blocks active content outright and may auto-upgrade passive content. The site looks broken in unpredictable places: the gallery is empty, a form endpoint fails, or a video placeholder remains.

What the warning actually means

A page loaded over https cannot safely request http in most cases. The http request would travel unencrypted, which defeats the transport security you added at the top level. Browsers split the danger into two groups:

| Resource type (blocked) | Examples |

| Passive, usually auto-upgraded | Images, videos, audio |

| Active, always blocked | <script>, <link stylesheet>, fetch(), XMLHttpRequest, iframe through http, @font-face through http |

Active content can read and change the page, so browsers refuse it at the network layer. A single banner ad loaded over http with a script active can produce the padlock and console errors even when the rest of the page is clean HTTPS.

How to find the offenders

  1. Open the page in the browser, then open developer tools (F12) and the Console tab.
  2. Filter Console messages for "mixed content" or "blocked". The messages list the exact URL of the offending resource.
  3. Open the Network tab, filter for http:// scheme requests, and disable cache (checkbox) before reloading.
  4. Repeat on several pages, since one shared header or widget loads the same resource everywhere.

How to fix it

1. Change the source URL

2. Re-issue the resource itself

3. Add a Content Security Policy header

A strict upgrade-insecure-requests directive tells the browser to rewrite http requests to https automatically. Example header for an nginx config:

add_header Content-Security-Policy "upgrade-insecure-requests" always;

This is a safety net, not a rewrite of the source. If an asset does not exist over https it still fails, and the console shows why.

4. Catch it across the whole site

Prevention

The redirect article explains how to make the whole site live on https so new pages cannot regress.

Need a website built, fixed, optimised, migrated or replaced?

This technical resource is written by CSMBAC, a small design and development studio. If you would rather hand the problem to a professional, the website service page explains how we build enquiry-ready websites.

Explore website services