HTTPS-запрос подразумевает HTTP-заголовок ответа и предупреждение о смешанном содержимом - как избежать - PullRequest
0 голосов
/ 19 декабря 2018

На сайте PHP я запрашиваю изображения (фотографии профиля пользователя) из файла PHP, изображение загружается явным образом с использованием HTTPS в качестве всего сайта, где включен HSTS.

Проблема в том, что сайт даетПредупреждение о «смешанном содержимом» в Chrome и Firefox, даже если ни один ресурс не загружен с использованием HTTP - все они являются относительными или явными HTTPS в исходном коде.

Когда я смотрю на вкладку сети в инструментах разработчика Chrome, яМожно видеть, что изображение первоначально запрашивается с использованием HTTPS, но затем выполняется внутреннее перенаправление 307 с использованием HTTP, и, наконец, изображение извлекается с использованием HTTPS. HTTP-запрос на вкладке Chrome network

В PHP-файле, возвращающем изображение, запрос направляется по index.php и .htaccess с использованием простого rewriterule

RewriteRule ^([^/.]+)/([^/.]+)/?$     index.php?action=$1&data1=$2  [L,QSA] 

ИPHP-файл также очень прост.

if(!isset($_GET["f"]))die("filepath missing");
$file = APP."/filecache/".$_GET["f"];
if(file_exists($file)){
  if(substr($_GET["f"],-3)=="jpg") Header("Content-Type: image/jpeg");
  if(substr($_GET["f"],-3)=="png") header("Content-Type: image/png");
  header('Cache-control: max-age='.(60*60*24*365));
  header('Expires: '.date("Y-m-d H:i:s",strtotime("+365 days")));
  header('Last-Modified: '.gmdate(DATE_RFC1123,filemtime($file)));
  readfile($file);
}else{
  die("no such file");
}

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

Сайт работает на DO VPS, Apache / Nginx с PHP-FPM 7.1.

С уважением и счастливых праздников, Марк

1 Ответ

0 голосов
/ 19 декабря 2018

Я не знаю, почему перенаправление с https возвращается к http.Я хотел бы обойти использование RewriteRule с абсолютным URI, включая схему, например:

RewriteRule ^([^/.]+)/([^/.]+)/?$  https://%{HTTP_HOST}/index.php?action=$1&data1=$2  [L,QSA]

Я не пробовал эту строку в моем .htaccess, так как у меня нет такого варианта использования, поэтому, пожалуйста, попробуйте сами, еслиэто подходит.

...