网站升级为https后引用http报错:This request has been blocked; the content must be served over HTTPS

HTTPS 是 HTTP over Secure Socket Layer,以安全为目标的 HTTP 通道,所以在 HTTPS 承载的页面上不允许出现 http 请求,一旦出现就是提示或报错:

Mixed Content: The page at ‘https://www.taobao.com/‘ was loaded over HTTPS, but requested an insecure image ‘http://g.alicdn.com/s.gif’. This content should also be served over HTTPS.


HTTPS改造之后,我们可以在很多页面中看到如下警报:

很多运营对 https 没有技术概念,在填入的数据中不免出现 http 的资源,体系庞大,出现疏忽和漏洞也是不可避免的。


CSP设置upgrade-insecure-requests

好在 W3C 工作组考虑到了我们升级 HTTPS 的艰难,在 2015 年 4 月份就出了一个 Upgrade Insecure Requests 的草案(http://www.w3.org/TR/mixed-content/),他的作用就是让浏览器自动升级请求。

在我们服务器的响应头中加入:

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

我们的页面是 https 的,而这个页面中包含了大量的 http 资源(图片、iframe等),页面一旦发现存在上述响应头,会在加载 http 资源时自动替换成 https 请求。可以查看 google 提供的一个 demo(https://googlechrome.github.io/samples/csp-upgrade-insecure-requests/index.html):

不过让人不解的是,这个资源发出了两次请求,猜测是浏览器实现的 bug:


当然,如果我们不方便在服务器/Nginx 上操作,也可以在页面中加入 meta 头:

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

目前支持这个设置的还只有 chrome 43.0,不过我相信,CSP 将成为未来 web 前端安全大力关注和使用的内容。而 upgrade-insecure-requests 草案也会很快进入 RFC 模式。

从 W3C 工作组给出的 example(http://www.w3.org/TR/upgrade-insecure-requests/#examples),可以看出,这个设置不会对外域的 a 链接做处理,所以可以放心使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这个错误提示是因为你的网页使用了 HTTPS 协议访问,但是页面中的静态资源却是通过 HTTP 协议加载的,导致浏览器阻止了这些资源的加载。解决方案是将静态资源的地址改为 HTTPS 协议的地址,或者将整个网站都配置为 HTTPS 协议。具体操作可以参考以下步骤: 1. 将 Nginx 配置文件中的 listen 指令改为监听 443 端口,并配置 SSL 证书,如下所示: ``` server { listen 443 ssl; server_name your_domain.com; ssl_certificate /path/to/ssl/cert; ssl_certificate_key /path/to/ssl/cert/key; location / { # your website configuration } location /static/ { # your static resources configuration } } ``` 2. 将网页中静态资源的地址改为 HTTPS 协议的地址,如下所示: ``` <link rel="stylesheet" href="https://your_domain.com/static/css/style.css"> <script src="https://your_domain.com/static/js/main.js"></script> ``` 3. 重启 Nginx 服务,使配置生效。 ``` sudo systemctl restart nginx ``` ### 回答2: 在配置Nginx之后,如果遇到页面静态资源加载不到的错误,并显示"This request has been blocked; the content must be served over HTTPS...",这意味着网站要求所有内容必须通过HTTPS进行服务。 HTTPS是一种安全的HTTP协议,它使用SSL/TLS加密通信,保护了数据的传输和用户的隐私安全。为了解决该问题,我们需要确保页面静态资源通过HTTPS进行加载。 首先,确保Nginx已正确配置SSL/TLS证书。证书的生成和配置过程略过。尽管可以使用免费的Let's Encrypt证书,但此过程超出了本文的范围。 在Nginx的配置文件中添加以下设置,确保重定向所有HTTP流量到HTTPS: server { listen 80; server_name your_domain.com; location / { return 301 https://$host$request_uri; } } 上述配置将监听80端口,并将所有HTTP请求重定向到相应的HTTPS地址。 然后,在对HTTPS做正确设置后,确认页面中的静态资源是否正确引用HTTPS链接。在HTML或CSS文件中,将所有相对路径的资源地址改为绝对路径的HTTPS链接。 例如,原本的链接可能是: <link rel="stylesheet" href="/css/style.css"> 应更改为: <link rel="stylesheet" href="https://your_domain.com/css/style.css"> 对于包含图片或其他资源的链接也应该相应更改。 最后,检查Nginx的访问日志和错误日志,查看是否有其他与HTTPS相关的错误信息。根据错误信息进行相应的处理。 通过以上步骤,您应该能够解决配置Nginx后页面静态资源加载不到的问题,并成功进行HTTPS服务。 ### 回答3: 这个错误提示表明配置了nginx后,页面静态资源加载不到,因为资源必须通过HTTPS进行提供。这是因为nginx的配置中启用了HTTPS,但是静态资源的请求还是通过HTTP进行,所以页面加载时会被拦截。 要解决这个问题,可以采取以下步骤: 1. 确保nginx的配置正确。检查nginx.conf文件或虚拟主机配置文件,确认是否启用了HTTPS,并且相关的证书和密钥文件路径配置正确。 2. 确认页面中的静态资源引用使用的是HTTPS。检查HTML代码或者其他引用静态资源的文件,确保资源的URL路径是以HTTPS开头的。 3. 使用nginx的rewrite规则将HTTP请求重定向到HTTPS。在nginx配置文件中,可以使用rewrite规则将所有以HTTP开头的请求重定向到对应的HTTPS路径。例如可以添加类似以下规则: ``` server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; } ``` 4. 重启nginx服务。完成上述配置后,重启nginx服务使配置生效。 通过以上步骤,应该能够解决配置nginx后页面静态资源加载不到的问题,确保页面通过HTTPS成功加载静态资源。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值