HTTPS请求包含HTTP响应标头和混合内容警告-如何避免

时间:2018-12-19 08:27:06

标签: php hsts

在我从一个PHP文件中请求图像(用户个人资料照片)的PHP站点中,使用HTTPS作为启用HSTS的整个站点显式加载该图像。

问题是,即使没有使用HTTP加载单个资产,该网站也会在Chrome和Firefox中发出“混合内容”警告-源代码中的所有资源都是相对HTTP或显式HTTPS。

当我在Chrome开发人员工具中查看“网络”标签时,可以看到最初使用HTTPS请求了该图像,但随后使用HTTP进行了内部重定向307,最后使用HTTPS检索了该图像。 HTTP request in Chrome network tab

返回图像的PHP文件使用简单的重写器将请求由index.php和.htaccess路由

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");
}

Web应用程序运行良好,但是混合内容警告确实让我感到沮丧,因此,我非常感谢任何可能有用的指针或想法。

该站点在DO VPS,具有PHP-FPM 7.1的Apache / Nginx上运行。

致以问候和节日快乐, 标记

1 个答案:

答案 0 :(得分:0)

我不知道为什么从https重定向回http。 我将使用带有绝对URI的RewriteRule来解决该问题,例如该方案:

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

我没有在我的.htaccess中尝试该行,因为我没有这样的用例,因此请在适合的情况下尝试一下。