ios客户端浏览器样式加载失效问题
最近线上测试中出现一个奇怪的问题,ios客户端浏览器样式加载失效。
从表象来看,同样的css,安卓手机上可以正常展示,但是到ios手机上首次进入页面就不能正常显示
这时候,我们首先会考虑是不是ios设备的兼容问题?
于是乎,第一想到的就是问度娘,ios手机浏览器不能正常展示css是什么原因?这么泛泛的问题,想找到你的答案如同大海捞针。
其次想到的就是在测试环境调试一下,结果测试机在测试环境看是正常的,线上环境看问题复现率100%。这时就想着看看css资源路径有什么差异,为什么上面的css不展示,下面的都正常展示了?
答案是:ios客户端将访问强制切换https安全协议,而页面提供的资源是http协议的。于是就引发了上面的问题,因为https地址中,如果加载了http资源,浏览器将认为这是不安全的资源,将会默认阻止,这就会给你带来资源不全的问题了,比如:图片显示不了,样式加载不了,JS加载不了。
解决方案一:
在html文件的head标签中添加<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
当浏览器支持“upgrade-insecure-requests”属性时,会自动将http链接替换为https
解决方案二:
将连接中的算有http连接更换为https
解决方案三:
客户端修改为http,或允许混合模式(http与https),如果不单独设置,WebView是不支持在Https域名下加载Http资源的。
深入一点
为什么不允许?
当用户访问HTTPS页面时,与WEB服务器之间的连接是使用SSL加密的,从而保护连接不受嗅探器和中间人攻击。
如果HTTPS页面包含由普通明文HTTP连接的内容,那么连接只是被部分加密,非加密的内容可以被嗅探者入侵,并且可以被中间人攻击者修改,因此连接不再受到保护。
当一个网页出现这种情况时,它被称为混合内容页面。
混合内容页面的类型
混合被动/显示内容
使用HTTP内容包含在一个HTTPS页面,但它不能改变网页的其他部分。
攻击者可以用一张不恰当的图片替换掉原始的图片,并根据替换的图片内容判断用户正在访问的页面等。
这些内容包括:
<img>,<audio>,<video>,<object>(进行http请求时)等标签混合活动内容
访问全部或部分HTTPS页面文档对象模型的内容。这种类型的混合内容可以改变HTTPS页面的行为并可能向用户窃取敏感数据
在混合活动内容情况下,中间人攻击者可以拦截HTTP请求的内容。攻击者也可以重写响应来包含恶意的JavaScript代码。恶意的活动内容可以窃取用户的凭据,获得关于用户的敏感数据,甚至在用户的系统上安装恶意软件(例如,通过浏览器漏洞或插件)。
混合内容的风险取决于用户访问网站的类型和网站数据暴漏的的敏感程度。网页可能有公共访问数据或需有通过身份验证的私有数据。如果网页是公开的并且没有关于用户的敏感数据,使用混合活动内容仍可能为攻击者提供将用户重定向到其他HTTP页面并从那些网站上窃取HTTP cookie的机会。
混合活动内容包括:
<script><link>- XMLHttpRequest
 <iframe>- 所有在CSS中用到url的场景,如
@font-face, cursor, background-image <object>用data属性时
作者:旧旧的 <393210556@qq.com> 解决问题的方式,就是解决它一次
ios客户端浏览器样式加载失效问题的更多相关文章
- https加载http资源,导致ios手机上的浏览器图片加载问题
		
今天解决一个线上bug的时候发现的问题,如下图: 从表象来看,同样的图片,安卓手机上可以正常展示,但是到ios手机上首次进入页面就不能正常显示图片,必须手动刷新一次页面才能正常加载. 这时候,我们首先 ...
 - 浏览器如何加载和解析CSS——CSS样式来源与层叠规则
		
关于CSS样式首先得理解浏览器如何加载它们,最终的页面样式是如何呈现的? CSS层叠样式表的关键在于"层叠",会根据选择符的使用而将样式相互叠加或者覆盖. CSS样式表之所有有&q ...
 - [WebKit]浏览器的加载与页面性能优化
		
非常棒.非常系统的一份资料,值得阅读! 原文来自百度泛用户体验. 作者:nwind 本文将探讨浏览器渲染的loading过程,主要有2个目的: 了解浏览器在loading过程中的实现细节,具体都做了什 ...
 - css样式加载顺序及覆盖顺序深入理解
		
注:内容转载 很多的新手朋友们对css样式加载顺序和覆盖顺序的理解有所偏差,下面用示例为大家详细的介绍下,感兴趣的朋友不要错过 { height: 100%; width: 200; position ...
 - 解决方案:带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载可能出现 COM 组件的80040154错误
		
建议大家在微软的组件出现问题时,在GOOGLE上搜索解决方案,一般来说,总有结果: 带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载,可能出现 COM 组件的80 ...
 - IOS 多个UIImageView 加载高清大图时内存管理
		
IOS 多个UIImageView 加载高清大图时内存管理 时间:2014-08-27 10:47 浏览:59人 当我们在某一个View多个UIImageView,且UIImageView都显示的是 ...
 - Centos6架设GIT服务,windows客户端使用TortoiseGit加载KEYGEN连接GIT服务器
		
前几天得空,想起前一阵学了GIT还没好好实践,就在虚拟机中安装测试了一下,并简单记录了CENTOS6中GIT安装,ssh-keygen生成,客户端使用TortoiseGit加载KEYGEN连接GIT服 ...
 - 使用gulp实现文件压缩及浏览器热加载
		
一.安装gulp 首先,你要安装过nodejs,如果没有安装过的同学请自行下载. 先再命令行里输入 npm install gulp -g 下载gulp 二.创建gulp项目 创建一个你需要 ...
 - css样式加载顺序
		
css样式加载顺序: A: id选择器指定的样式 > 类选择器指定的样式 > 元素类型选择器指定的样式 B: 如果要让某个样式的优先级变高,可以使用!important来指定: .clas ...
 
随机推荐
- 微信小程序分页显示
			
<view class="tabNav"> <view wx:for="{{navTab}}" wx:key="index" ...
 - grafana 的配置文件,和使用mysql数据库做持久化
			
grafana 配置文件 vim /etc/grafana/grafana.ini 下面有些参数在新版中6.x版本中已经过时,请参考下面官网最新帮助文档为准 https://grafana.com/d ...
 - 传统PC机I/O位址空间范围
			
空间范围是0x000--0x3FF,有1024个I/O端口位址可供使用! 使用EISA或PCI等汇流排结构的现代PC机,有64KB的I/O位址空间可供使用.在普通Linux系统下透过查看/proc/i ...
 - Pytest从测试类外为测试用例动态注入数据
			
今天Nelly问我Pytest能不能支持从TestClass类外传入参数?从类外批量传入各个test方法需要的参数.因为数据文件可能有很多情况,不方便依次匹配. 然而又必须用类对用例进行归类及复用,数 ...
 - 卸载ros
			
#卸载 ros sudo apt-get autoremove ros-*
 - Java学习日记基础篇(八) —— 二进制、位运算、位移运算
			
二进制 二进制是逢2进位的进位置,0,1是基本算符 原码反码补码 在基本数据类型那里,有详细解释 二进制的最高位数是符号位:0表示整数,1表示负数 正数的原码,反码,补码都一样 负数的反码 = 它的原 ...
 - 备份的数据库文件(500M左右)无法导入的解决方法
			
解决方法: 修改配置文件/usr/local/mysql/my.cnf 在my.cnf文件下添加一句:max_allowed_packet=900M 注:此处大小不能设置过大,过大可能会导致还原过程中 ...
 - Beta冲刺(2/4)
			
队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11990570.html 作业博客 : https://edu.cnblogs.com/campus/ ...
 - world: 对比两个文档
			
1. 2. 3. 4.
 - VSCode 代码格式化 快捷键
			
Visual Studio Code可以通过以下快捷键 格式化代码: On Windows Shift + Alt + F On Mac Shift + Option + F On Ubuntu ...