我有一个解决方案,我的 Android WebView 需要首先打开一个 https url,然后它将被重定向到一个 http url(它可能正在尝试从 https 站点发送一个 http POST)。这不起作用,我的 Android 调试日志显示:
02-20 11:04:45.079 8538-8538/? E/WebViewCallback﹕ Blocked URL: [blocked] The page at 'https://xxx/' was loaded over HTTPS, but is submitting data to an insecure location at 'http://yyy': this content should also be submitted over HTTPS.
WebView 中是否有任何允许这种行为的配置选项?
更多信息:这似乎是 Android SDK 中的行为更改。很久以前编译的客户端没有任何提示。
最佳答案
Lollipop (API 20) 中混合 http/https 内容的默认 WebView 设置发生了变化。参见 https://datatheorem.github.io/android/2014/12/20/webviews-andorid-lollipop/了解更多详情。
要允许 https 重定向到 http,您需要将混合内容模式设置为 MIXED_CONTENT_ALWAYS_ALLOW
if (Build.VERSION.SDK_INT >= 21) {
webview.getSettings().setMixedContentMode( WebSettings.MIXED_CONTENT_ALWAYS_ALLOW );
}
请注意,从安全角度来看,设置 MIXED_CONTENT_ALWAYS_ALLOW 是不好的,正如您在回答中指出的那样,最好在两个站点上都支持 https。
但对于那些无法控制网站的人来说,这应该可行。
关于Android WebView 阻止从 https 重定向到 http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28626433/