明明是 HTTPS,怎么就 Mixed Content 了,就拒绝加载了呢?

                                                       ——记录一次从发现问题到尝试解决问题的曲折路线

问题,发现上传的图片不能显示,也不能加载到CDN中。

F12可以看到,302暂时性重定向了,然后显示Mixed Content,图片没有加载,也没有到CDN上面去,然后继续百度,得到这篇文章:

明明是 HTTPS,怎么就 Mixed Content 了

可以点击resolving relative URLs看看 HTML5 规定解析 URL 的步骤,其中可以看到,若存在base标签,则解析相对路径的时候是会用到base标签中设置的 URL 的信息。

自适应协议路径是被当做相对路径解析,解析的时候会引用base标签中设置的 URL 的scheme,而这个scheme在这里是 HTTP,所以通过 HTTPS 访问的时候就会出现Mixed Content错误。

F12看了看,在

response header

里面有个Location标签,上面显示的是图片的http地址,然后又查到这个标签的功能

Location
WEB 服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取。

好不容易全弄成https的,有给我重定向回去了。

按照那篇文章的说法,要么改,要么去掉,于是开始百度各种关键词

“去掉Location字段”,“编辑response header”,“去掉response header中的Location”但是出来的东西完全不对,想到response header应该是一个很复杂的东西,可能东西很多很杂,然后就尝试了百度“配置response header”,这一下子道路有明确了几分。

response header中可以携带很多的标签,通过命令配置,可以增加,减少某些标签,然后到了这篇文章httpd配置ResponseHeader

尝试,开始,在httpd.conf中没有找到LoadModule headers_module MODULES_PATH/mod_headers.so相关的东西,干脆自己在最后加了一行,模仿格式配置了取消Location模块的配置

(1)在httpd.conf文件确保mod_headers模块被加载

LoadModule headers_module MODULES_PATH/mod_headers.so

(2)使用Header指令,进行set操作

<IfModule headers_module>
  Header unset Location
</IfModule>

(3)重启apache服务器

service httpd stop
service httpd start

然后,果然,报错了,尝试删除

LoadModule headers_module MODULES_PATH/mod_headers.so

这一行,再次尝试启动,依旧报错。

分析:可能是几行配置文件修改的位置有问题,可能mod_headers模块就没有加载,或者没有安装。

查到这么模块是内建的,不需要加载(似乎是这样的,这个东西不是一致都在运行么......)

配置的参数有问题,先还原httpd.conf看看能不能启动。果然还原了就能够正常启动了。

找到了APACHE官方文档关于mod_headers的部分,找时间研究一下:

APACHE官方文档