You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止JQuery自动将HTTP请求重定向至HTTPS?

解决WebView中jQuery HTTP请求被强制重定向到HTTPS的问题

首先得明确重定向的来源——可能是服务器端配置了HTTP转HTTPS规则、WebView的HSTS安全策略自动升级,或者页面脚本触发的跳转。针对不同情况,你可以试试下面这些方案:

1. 拦截WebView的重定向请求

通过自定义WebViewClient拦截所有跳转请求,把HTTPS地址强制改回HTTP:

webView.setWebViewClient(new WebViewClient() {
    // 拦截页面跳转类的重定向
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        String targetUrl = request.getUrl().toString();
        if (targetUrl.startsWith("https://your-server-domain.com")) {
            String httpUrl = targetUrl.replaceFirst("https://", "http://");
            view.loadUrl(httpUrl);
            return true; // 表示已处理该请求
        }
        return super.shouldOverrideUrlLoading(view, request);
    }

    // 拦截AJAX这类资源请求的重定向
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        String targetUrl = request.getUrl().toString();
        if (targetUrl.startsWith("https://your-server-domain.com")) {
            try {
                // 手动构造HTTP请求绕过重定向
                URL httpUrl = new URL(targetUrl.replaceFirst("https://", "http://"));
                HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
                // 复制原请求的方法和请求头
                conn.setRequestMethod(request.getMethod());
                for (Map.Entry<String, String> header : request.getRequestHeaders().entrySet()) {
                    conn.setRequestProperty(header.getKey(), header.getValue());
                }
                // 返回构造的响应
                return new WebResourceResponse(
                        conn.getContentType().split(";")[0],
                        conn.getContentEncoding(),
                        conn.getInputStream()
                );
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return super.shouldInterceptRequest(view, request);
    }
});

2. 禁用WebView的HSTS策略

如果是HSTS(HTTP严格传输安全)导致的强制跳转,在Android O及以上版本可以直接关闭:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    webView.getSettings().setHttpsState(WebSettings.HttpsState.DISABLED);
}

低版本可以尝试清除WebView的HSTS缓存,或者通过反射修改相关设置(注意兼容性)。

3. 调整jQuery AJAX的请求配置

确保AJAX请求不自动升级协议,并且禁用重定向跟随:

$.ajax({
    url: 'http://your-server-domain.com/api/your-endpoint',
    type: 'GET', // 或POST等对应方法
    // 禁用自动跟随重定向
    xhrFields: {
        withCredentials: false
    },
    beforeSend: function(xhr) {
        // 告诉服务器不要强制升级到HTTPS
        xhr.setRequestHeader('Upgrade-Insecure-Requests', '0');
    },
    success: function(response) {
        // 处理返回数据
    },
    error: function(xhr, status, err) {
        console.error('请求失败:', err);
    }
});

4. 检查并调整服务器配置(如果可行)

如果能接触到服务器,暂时关闭HTTP到HTTPS的重定向规则:

  • Nginx:注释掉rewrite ^(.*)$ https://$host$1 permanent;这类重写规则
  • Apache:注释掉RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]规则

额外确认项

  • 确保你已经正确开启了混合内容允许:
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
  • 可以用Chrome DevTools远程调试WebView,查看Network面板的请求流程,定位具体是哪一步触发的重定向。

内容的提问来源于stack exchange,提问作者Jake StBu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:00:20