ios axios请求status=0
使用https协议的站点中,当页面请求了http协议的情况:
- 请求http协议的接口,这时,ios手机的请求会发送不出去,请求的status=0,也不会报错;安卓手机可以正常发送请求。
- 页面加载了http协议的js、css、图片等资源,这时,控制台报错:
Mixed Content: The page at ‘https://*****’ was loaded over HTTPS, but requested an insecure ****. This request has been blocked; the content must be served over HTTPS
,加载的js、css被拒绝了,图片可以加载出来,但是会有警告。
解决方案
- 动态发送接口请求http资源的,后端可以用nginx代理的方式提供https接口,然后重定向到目标http接口;
- 如果只是发起请求,不需要在当前页面处理返回值,可以用表单请求;
<form action="http://xxx.com/facepay" method="POST">
<input type="submit" value="提交">
</form>
- 静态加载http资源的,若http资源本身支持https,可以在html页面加入
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
,浏览器在加载资源的时候会自动把http请求转化为https请求; - 如果请求的http资源在自己的服务器上(非第三方服务),资源本身不支持https,可以把要请求的http资源协议改为https;
- 若http资源本身不支持https,并且都是静态资源(比如js、css等),可以将这些资源下载下来放到已有的https服务器中;