https网页下报Mixed Content

现象:在https网页下,发送http请求,会在控制台报错,网页的一些功能可能会异常,如:

Mixed Content: The page at 'https://10.124.**.**/#/embeddedPage?linkUrl=https%3A%2F%2F10.124.**.**%2Fkite-react%2F%23%2Freception&systemInfoId=10085&menuActiveKey=329&usePortalFoot=false' 
was loaded over HTTPS, but requested an insecure resource 'http://10.124.**.**/auth/attachment/subOppoDownload?flowId=b2b984282b1527d2544e7d807a33e38d&userLogin=hq'. 
This request has been blocked; the content must be served over HTTPS

本文档将围绕以下几点进行阐述

1、造成报错原因

浏览器不允许在https页面里嵌入http的请求,现在高版本的浏览器为了用户体验,都不会弹窗报错,只会在控制台上打印一条错误信息。

报Mixed Content的前提条件:

1、在https网页下;

2、请求接口为http请求,但请求的服务器又升级为https协议了。

在这里插入图片描述

2、解决方法主要有两个

2.1、在客户端主页面的head中加入下面代码(将调用的http请求升级成https请求并调用)

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

2.2、由后端在服务器上设置响应头,如nginx上设置如下配置:

add_header Content-Security-Policy upgrade-insecure-requests;

在这里插入图片描述

以上两种方法有细微的区别。客户端设置的这种方法会将所有接收https请求的服务接口全部自动升级为https请求,即使在代码中请求http://www.baidu.com, 最终在浏览器网络请求中查看,会看到https://www.baidu.com。

对于接收非https请求的服务接口,则上述设置无效,不会自动升级为https请求。如下图所示:
在这里插入图片描述

优劣:对于一般情况,客户端或者服务器端设置都没有太大区别。但对于下面的情况,则只能选则服务端设置。

如果设置客户端方式,假设有A(https)、B(http)两个接口,但B所在服务器也设置了https代理(所以最终B接口会升级为https请求),但https代理转发没有设置B接口,则B接口会报net::ERR_SSL_PROTOCOL_ERROR错误。

如果设置服务端方式,则只需在A接口对应的服务器上设置响应头,在B服务器上不做设置,则B接口正常请求到http代理上,能正确找到http接口。

3、实战分析

说明:localhost/api/getData接口为http接口,www.loma18.com/blog/getArticleTypeCount 为https接口。

正确写法如下:

axios.get('http://localhost/api/getData'); // 特殊请求,需访问http接口
axios.get('//www.loma18.com/blog/getArticleTypeCount'); // 一般请求,全部升级为https请求

4、问题分析

对于以下跨域问题,可通过在nginx设置 add_header Access-Control-Allow-Origin *;
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mixed content是指网页上同时包含了安全HTTPS协议和不安全HTTP协议的内容。当一个网页使用HTTPS协议时,所有的内容都必须使用安全协议,因为网络攻击者可以通过在不安全的HTTP连接中注入恶意代码,从而危害网页的安全性。 而跨域a链接则是指当一个网页中的a标签中的href属性值指向另一个域名下的资源时,浏览器无法直接访问该资源,需要通过跨域请求的方式才能获取到。 当以上两者结合在一起时,就会出现mixed content跨域a链接的问题。因为如果在使用HTTPS网页中加载HTTP的跨域a链接,就可能会导致Mixed content警告的出现,这时用户就无法信任网页的安全性。 为了解决这个问题,可以通过使用HTTPS协议加载跨域资源的方式来避免Mixed content警告的出现。或者是使用同一协议加载跨域资源,避免不安全的HTTP协议的使用。同时,网页开发者也可以在网页的HTTP头部添加CSP安全策略,来限制网页中不安全资源的加载。 ### 回答2: Mixed Content(混合内容)是指使用HTTPS协议的网页中,混合了HTTP协议的非加密内容。这种情况下,浏览器会产生警告,防止可能存在的安全风险。 跨域A链接是指网页中通过A标签指向其他网站的链接。由于同源策略的限制,通常情况下跨域的A链接不能访问对方网站的内容。但是如果对方网站的链接使用了HTTPS协议,而本网站链接使用了HTTP协议,则会产生Mixed Content,导致无法访问。 为了解决这个问题,我们可以在本网站的A标签上添加rel="noopener noreferrer"属性。该属性可以防止其他网站中嵌入的恶意代码能够访问我们的本站资源。而添加noopener则能够避免打开新标签页时,新页面可以通过window.opener访问到原页面的窗口对象。这样就可以在保证安全性的同时,实现跨域A链接访问对方网站的内容。 需要注意的是,Mixed Content可能会导致某些浏览器阻止本网站的访问,甚至影响SEO排名等问题。因此,合理使用Mixed Content是非常重要的,我们应该尽可能减少混合内容的出现。 ### 回答3: Mixed content指的是在使用HTTPS的网站中嵌入了HTTP的非安全资源。跨域a链接指用户在HTTPS的网站上点击了一个链接,但该链接指向的是HTTP的非安全网站。 当HTTPS网站中嵌入了HTTP资源时,会存在安全风险,因为攻击者可以借助HTTP的不安全特性进行一些攻击,比如中间人攻击、篡改页面内容等。而跨域a链接也会导致一些安全问题,因为攻击者可以通过修改跨域链接的地址,使用户跳转到恶意网站,从而进行钓鱼、恶意软件等攻击。 为了解决这些安全问题,网站可以采取一些方法来限制mixed content和跨域a链接: 1. 在HTTPS网站中嵌入的所有资源都应该是HTTPS的,确保所有资源都是安全的。 2. 使用Content Security Policy(CSP)可以帮助网站限制mixed content,只允许HTTPS的资源访问。 3. 可以使用HTTP strict transport security(HSTS)来限制跨域a链接。HSTS要求所有请求必须使用HTTPS并且会在客户端中设置一个“强制使用HTTPS”的标志,从而防止攻击者修改跨域链接地址。 4. 可以通过对跨域链接进行审查,确保所有跨域链接都是安全的,同时加强用户教育,提高用户的防范意识。 总之,保证网站的安全性和用户隐私是网站运营者应考虑的重要问题。通过限制mixed content和跨域a链接,可以有效降低网站的安全风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值