Загрузка шрифта Google по протоколу HTTPS, содержимое заблокировано

#css #wordpress #fonts #https #mixed-content

#css #wordpress #шрифты #https #смешанный контент

Вопрос:

Существует тема WordPress, которая автоматически выбирает выбранный шрифт и запрашивает его у Google font. когда для нескольких выбранных страниц потребовался ssl, шрифт стал missing

Просмотр журнала консоли:

[заблокировано] Страница в ‘https://www.example.com /‘ был загружен по протоколу HTTPS, но запускал небезопасный контент из ‘http://fonts.googleapis.com/css?family=Alegreya Sans:300 ,400,500, 700, 800‘: это содержимое также должно быть загружено по протоколу HTTPS.

будет ли работать переход в код и выполнение всех запросов по протоколу https от Google font? Есть ли какой-либо обходной путь для этого?

найден исходный код… но, похоже, это уже делается … может ли быть ошибка в логике if?

 $prefix = "http";
            if(isset($_SERVER['HTTPS']) amp;amp; $_SERVER['HTTPS'] == 'on') $prefix = "https";

            if($get_google_font){

            if(!in_array($rule_split[0], $this->used_fonts))
            {
                $this->extra_output .= "n<!-- google webfont font replacement -->n";
                $this->extra_output .= '<link id="google_webfont_'.$this->webfont_count.'" rel="stylesheet" type="text/css" href="'.$prefix.'s://fonts.googleapis.com/css?family='.str_replace(' ',' ',$rule_split[0]).$font_weight.'" />';
            }
  

Ответ №1:

Отредактируйте свою тему, заменив все вхождения http://fonts.googleapis.com/... на https://fonts.googleapis.com/... (обратите внимание на s).

Ресурсы, которые могут представлять угрозу безопасности (такие как скрипты и шрифты), должны загружаться через защищенное соединение при запросе в контексте защищенной страницы по очевидной причине: ими могли манипулировать по пути.

Комментарии:

1. Да, возможно обратное (загрузка ресурсов через TLS / SSL на незащищенную страницу).

2. Хорошо, просто нужно подтвердить, тогда я перейду к коду. спасибо ~

3. есть идеи по поводу кода, который я опубликовал? кажется, он уже делает это, но оператор if кажется ложным даже на https

4. Вы оставили ложную s:// в <link ... строке. В любом случае, вам это не нужно, просто используйте относительные URI протокола , и все готово.

5. Три года спустя ситуация изменилась. В настоящее время не рекомендуется использовать URI, относящиеся к протоколу, учитывая, что безопасные соединения проще настраивать и они очень дешевые, если не почти бесплатные, для многих распространенных целей. Если вы можете обслуживать через https , то, во что бы то ни стало, сделайте это.

Ответ №2:

Используйте относительные URIпротокола

Просто используйте // префикс. ( instead of http[s]:// )

  • На странице https будет загружена защищенная версия.
  • На обычной http-странице будет загружена обычная http-версия.

Отредактируйте свою тему, заменив каждое появление http://fonts.googleapis.com/... на //fonts.googleapis.com/...

Ответ №3:

позвольте браузеру справиться со всем, просто удалите «http» из вашей ссылки.

аналогично вы должны поступить и с другими библиотеками, если вы столкнулись с такой же проблемой с ними, например

 https://fonts.googleapis.com/css?family=Open Sans:700,600,800,400
  

Для

 //fonts.googleapis.com/css?family=Open Sans:700,600,800,400
  

то же самое для

 http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css
  

Для

 //maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css
  

Ответ №4:

Я столкнулся с этой проблемой, когда вы используете ссылки Google cdn, которые недоступны (например, страна, подобная Китаю), попробуйте использовать локальные файлы вместо cdn

Комментарии:

1. Мне интересно, есть ли способ использовать оба … то есть скрипт, который использует ссылку Google, но если он не работает, то полагайтесь на локальные файлы для того же шрифта.