EMZETT.
Войти

Смешанное содержимое: HTTP-контент на страницах HTTPS

Коротко: Страница, загруженная по HTTPS, включает ресурсы по незащищённому HTTP; браузеры блокируют это или предупреждают.

Подробнее: Сообщение: Mixed Content: The page at 'https://…' was loaded over HTTPS, but requested an insecure resource 'http://…'. This request has been blocked. Хотя сама страница зашифрована, злоумышленник мог бы прочитать или изменить незашифрованные изображения, скрипты или стили.

Подробности

Виды

  • Активное смешанное содержимое (скрипты, таблицы стилей, iframe, fetch/XHR): блокируется браузерами, потому что может скомпрометировать всю страницу.
  • Пассивное смешанное содержимое (изображения, аудио, видео): раньше загружалось лишь с предупреждением; современные браузеры автоматически повышают его до HTTPS или блокируют.
  • Значок замка исчезает или показывает предупреждение.

Причины

  • Жёстко заданные адреса http:// в HTML, CSS, JavaScript или в базе данных (содержимое из времён HTTP).
  • Сторонние скрипты или встроенные медиа по HTTP.
  • URL API, которые в конфигурации всё ещё содержат http://.
  • Прокси или CDN, передающие страницу браузеру как HTTP или задающие неверные заголовки X-Forwarded-Proto, из-за чего само приложение создаёт ссылки http://.

Решения

  1. В инструментах разработчика (F12 → Консоль) прочитайте затронутые URL.
  2. Перейдите на HTTPS или используйте относительные адреса (/image.png).
  3. Замените сохранённое содержимое (CMS, база данных) (http://domain → https://domain).
  4. Смените сторонние сервисы, если они не поддерживают HTTPS.
  5. Настройте сервер так, чтобы перенаправление HTTP→HTTPS и HSTS были активны; правильно задайте заголовки прокси.
  6. Content-Security-Policy upgrade-insecure-requests велит браузеру автоматически повышать ресурсы HTTP до HTTPS (лишь временная мера; лучше исправить источник).

См. также: HTTPS, Заголовки безопасности, Let’s Encrypt, ERR_CERT_DATE_INVALID