https网页加载http资源提示加载不安全脚本

 https是当下的网站的主流趋势,甚至像苹果这样的大公司,则完全要求用户必须使用https地址。

 然而对于以前http链接来说,我们往往就存在一个兼容性问题,因为你不可能一下就全部切换过去,应该在很长一段时间内,https与http将共存。

 https与http共存的场景有如:

   1. app已经发布出去,其调用接口的地址为http的,那么这是必须兼容的。

   2. app中嵌入了h5页面,而这页面在以前的设计中是使用http访问的,如果换成https地址,极有可能将导致h5页面无法打开。

   3. 对于流量推广一类的业务,可能原有的http推广地址已经发送给第三方,而且即使你通知到第三方要求改为https,也不排除有http地址的访问。

 针对以上场景,我们肯定是要https与http共存的。

 改https初看起来,其实就是一个域名指向的问题,也许我们只要将http的请求,直接跳转到https地址去,那么也就完成了https的切换。实际并不是这么简单的。

 因为https地址中,如果加载了http资源,浏览器将认为这是不安全的资源,将会默认阻止,这就会给你带来资源不全的问题了,比如:图片显示不了,样式加载不了,JS加载不了。因为样式类,基本上都是写在本地的,所以一般还可以,但是一些公共的js文件,往往就是存在于cdn或者其他服务器上,这时候,如果访问不了,可能就导致了业务就完全操作不了。比如:jquery效法加载失败,可能所有的操作、请求都将无效了。

 将http请求直接跳转至https请求,是一种解决办法,而且很多公司都是这么干的,比如百度什么的,但是前提是,你所有的服务都已切换https完成。

 但是对于,要兼容https、http两种协议的情况,怎样才能做到呢?

 1. 最笨的方法,直接复制原有代码,写成两套代码,一套为http使用,一套为https使用,http和https各自指向各自服务。

 2. 可用的方法,用同一套代码,在后台请求标识好协议,将该变量传到html页面中,进行协议替换,如:后台变量,$protocol = 'https://';  前台接收变量src='{$protocol}res.aa.com/jquery.js'。

 3. h5方法,使用js自己加载协议情况,如在body οnlοad='aa()', 在aa() 方法中,将资源按照需求加载进来即可。<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.2.js"%3E%3C/script%3E'))</script>

 4. 推荐方法,不指定具体协议,使用资源协议自适配,比如,当前为https页面,那么就是https资源,如果是http页面,那么就是http资源。具体方法超简单:<script src='//www.aa.com/jquery.js'></script>

 5.含有超链接的需要换成<a οnclick=window.open('http://jxipt.365960.cn/') style='cursor:pointer'>信息地址</a>

使用 iframe

使用 iframe 的方式引入 http 资源,比如在 https 里面播放优酷的视频,我们可以先在一个 http 的页面里播放优酷视频,然后将这个页面嵌入到 https 页面里就可以了。

另外一个典型的例子是在 https 页面里通过 Ajax 的方式请求 http 资源,Chrome 是不允许直接 Ajax 请求 http 的。如果两个页面的内容都可以控制的话,当前窗口可以 iframe 窗口进行通信。

其他用法

<img src="//domain.com/img/logo.png">

这个小技巧同样适用于 CSS : 

.omg background: url(//websbestgifs.net/kittyonadolphin.gif); }

转载于:https://www.cnblogs.com/jassy/p/8461812.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Unity中加载Asset Bundle(AB包)资源时,如果提示加载相同的资源,可能是因为该资源已经在内存中被加载过了。 为了解决这个问题,可以尝试在加载资源之前先使用AssetBundle.Unload()方法卸载上一个AB包,释放资源占用的内存,然后再加载新的AB包。如果你只是想卸载单个资源,可以使用Resources.UnloadAsset()方法来释放资源。 此外,也可以考虑在加载AB包时,使用AssetBundle.LoadAssetAsync()方法异步加载资源,这样可以更好地管理资源加载和卸载,避免出现重复加载的问题。 ### 回答2: 在Unity中加载AssetBundle(AB)包资源时,如果提示加载了相同的资源,可以尝试以下解决方法: 1. 检查资源命名:确保资源加载时的名称唯一且没有重复。资源名称包括包含文件名和文件路径的字符串,需要确保每个资源都有不同的名称。 2. 清除旧资源:在加载资源之前,先确保将之前加载资源删除或卸载。可以使用Unity的资源卸载功能来清除旧资源,例如使用Resources.UnloadUnusedAssets()方法来卸载未使用的资源。 3. 重启Unity编辑器:有时Unity编辑器可能会出现一些缓存或内存问题,导致无法正确加载资源。尝试重启Unity编辑器,然后重新加载资源包,以确保加载的是正确的资源。 4. 检查资源引用:确保在脚本或其他地方没有多次引用同一个资源。重复使用同一个资源可能会导致重复加载的问题。检查代码或其他资源引用的地方,确保每个地方只引用一次资源。 5. 清除缓存:Unity的AssetBundle模块有一个缓存系统来提高资源加载效率。但有时这个缓存可能会导致问题。你可以尝试手动清除缓存,可以使用Caching.ClearCache()方法来清除Unity的AB包缓存。 6. 更新资源版本:如果资源是从服务器或其他地方下载的,可能是因为资源版本问题导致重复加载。确保在加载资源之前,先检查资源的最新版本,并将版本信息与预期版本进行比较。 希望以上解决方法能帮助你解决Unity中加载AB包资源提示加载了相同的资源的问题。 ### 回答3: 在Unity中加载Asset Bundle(ab包)资源时,如果出现已加载了相同的资源提示,可以通过以下方法解决: 1. 确保只加载一次:在加载Asset Bundle资源前,可以使用`AssetBundle.LoadFromFile`方法判断该资源是否已加载。如已加载,则不再重复加载。 2. 释放已加载资源:使用`AssetBundle.Unload`方法手动释放已加载的Asset Bundle资源。在加载新的Asset Bundle资源前,先释放之前加载资源。这样可以确保每次加载的都是新的资源,避免冲突。 3. 使用不同的Asset Bundle名称:如果需要同时加载多个相同类型的Asset Bundle资源,可以为它们指定不同的名称来区分。通过修改Asset Bundle名称,可以确保加载的是不同的资源。 4. 强制解除引用:在加载Asset Bundle资源后,通过手动解除资源的引用,可以确保重新加载资源时不会出现重复加载提示。可以使用`Resources.UnloadUnusedAssets`方法来释放未使用的资源。 5. 检查资源路径:检查加载Asset Bundle资源时的路径是否正确。如果路径不正确,可能会导致同样的资源被重复加载。 在解决该问题时,需要注意合理管理资源加载与释放的时机,避免资源冗余加载和内存泄漏等问题的发生。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值