У меня есть приложение (статический веб-сайт), которое обслуживается внутри системы по протоколу HTTP, но доступ из браузеров конечных пользователей вынужден использовать HTTPS через балансировщик нагрузки:

+-------------------------+  +----------------------------------+
| browser                 |  |load balancer to which            |
| http://www.example.com  |  |www.example.com is resolved       |
| or                     +---> - listens on 80 and 443          |
| https://www.example.com |  | - rewrites http:// into https:// |
|                         |  |                                  |
+-------------------------+  +---------------+------------------+
                                             |
                             +---------------v-------------+
                             |actual server which listens  |
                             |on someip:80                 |
                             |                             |
                             +-----------------------------+

Моя веб-страница загружает сценарии JavaScript и CSS с помощью классических записей, таких как <script src='/script/hello.js'></script> или <link rel="stylesheet" href="/static/main.min.css">

Иногда случается, что эти скрипты /CSS не загружаются (страница отображается без CSS и JS, поэтому она явно некорректна) в первый раз (это нормально, если нажать F5 для перезагрузки страницы), и мне удалось отловить ошибку в Chrome Dev Tools:

Mixed Content: The page at 'https://www.example.com/status/' was loaded over HTTPS, but requested an insecure script 'http://www.example.com.com/static/jquery.min.js?ticket=ST-1233778-1feFoRbZPxS0ICdkJeR6-cas'. This request has been blocked; the content must be served over HTTPS.

Сообщение ясно: общая страница HTTP S содержит компоненты, которые являются только HTTP.

Мой вопрос: почему они HTTP, а не HTTPS?

  • вызовы относительны, поэтому независимо от того, что страница должна быть добавлена к относительному пути
  • Я полагаю, что ошибка возникает, когда кто-то делает первоначальный вызов через http:// (в противном случае не было бы проблем)
  • но в этом случае происходит то, что
    • пользователь вводит http:// и этот запрос покидает браузер ...
    • ... прибывает на балансировщик нагрузки ...
    • ... который перенаправляет запрос как http:// (поэтому сервер получает вызов http ) ...
    • ... содержимое доставляется обратно в балансировщик нагрузки ...
    • который преобразует вызов в https://

Я не понимаю, где может быть создан смешанный контент и почему это только для первого обращения к странице, исправлено обновлением через F5.

1 ответ1

0

Убедитесь, что базовый тег на вашей странице основан на HTTPS.

Тег определяет базовый URL/ цель для всех относительных URL в документе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .