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

问题在于,即使没有使用HTTP加载单个 Assets ,该网站也会在Chrome和Firefox中发出“混合内容”警告-在源代码中,所有 Assets 都是相对的或显式的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上运行。

亲切的问候和节日快乐,
标记

最佳答案

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

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

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

关于php - HTTPS请求暗示HTTP响应 header 和混合内容警告-如何避免,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53847211/

10-12 07:27
查看更多