让页面中的http请求转为https请求

由于项目业务升级,网站升级https协议。

在 HTTPS 承载的页面上不允许出现 http 请求,一旦出现就是提示或报错:

Mixed Content: The page at 'https://www.example.com' was loaded over HTTPS, 
but requested an insecure image ‘http://static.example.com/test.jpg’. 
This content should also be served over HTTPS.

因此即使使用到的域名对http请求已经强制了https,但是在页面中浏览器对于http请求压根就不会发送,那么就必需替换页面上所有的http为https,而我遇到的是个使用了十年的老系统,代码中有很多硬编码的http地址,一一替换的话要替换2万多行。。

于是从http协议入手,在响应header中添加upgrade-insecure-requests,即在php入口文件中添加:

header("Content-Security-Policy: upgrade-insecure-requests");

或着也可以在由前端在html页面中添加meta:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />

或者在nginx配置中进行header的添加:

server {
        listen       443;
        server_name  www.example.com;
        error_log  /logs/nginx/error.log;
        root /var/www/www.example.com;
        index  index.php index.html index.htm;
        ssl on;
        ssl_certificate   cert/test/test.pem;
        ssl_certificate_key  cert/test/test.key;
        ssl_session_timeout 5m;

         #添加响应头
        add_header Content-Security-Policy "upgrade-insecure-requests'";



        location / {
                if (!-f $request_filename){
                        rewrite ^/(.*)$ /index.php?s=$1 last;
                        break;
                }
                limit_except GET POST DELETE PUT {
                        deny all;
                }
        }
……
}

从而让浏览器对页面中的所有http请求,都升级为https协议发送请求,从而省去了逐一修改url的协议的麻烦。

以上,希望对大家有帮助。


  目录