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

Django API遇混合内容错误:HTTPS请求为何被浏览器转为HTTP?

解决Django API与WordPress混合内容错误(HTTPS转HTTP问题)

嘿,我来帮你搞定这个头疼的混合内容错误!明明写的是HTTPS的API地址,浏览器却非要发HTTP请求,这事儿确实诡异,咱一步步排查:

先确认实际请求的URL

首先打开浏览器的开发者工具(按F12),切换到Network标签,重新触发fetch请求,看看实际发起的请求URL到底是https://还是http://。这一步能帮你快速定位问题出在WordPress的代码输出,还是Django的响应重定向。


可能的原因&解决办法

1. WordPress里的fetch URL被悄悄转成了HTTP

你在WordPress后台写的JS代码里明明是https://,但实际页面输出的却是http://?这可能是:

  • 编辑JS时不小心手滑写成了http;
  • WordPress的缓存/CDN/安全插件自动替换了链接协议;
  • 用WordPress模板函数输出URL时,函数默认用了HTTP(比如某些旧的主题函数)。

解决办法:

  • 直接查看页面源代码,找到fetch那一行,确认URL开头是https://;
  • 如果是用模板或短代码输出的JS,检查模板文件里的URL是否正确,避免用硬编码的http://;
  • 把代码里的&改成&——在JS里不需要HTML实体转义,这玩意儿可能会干扰URL解析。

2. Django没识别到反向代理的HTTPS请求

PythonAnywhere的前端代理会把HTTPS请求转成HTTP发给你的Django应用,如果Django不知道原始请求是HTTPS,就可能触发重定向,把请求转成HTTP,导致浏览器收到不安全的响应。

解决办法:
在Django的settings.py里添加这行配置,告诉Django信任代理发来的HTTPS标识:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

另外,如果你开启了SECURE_SSL_REDIRECT = True,一定要加上上面的配置,不然会出现重定向循环。

3. 浏览器缓存了旧的HTTP请求

有时候浏览器会缓存之前错误的HTTP请求,哪怕你改了代码也没用。

解决办法:
在fetch请求里加上cache: 'no-cache'选项,强制浏览器不缓存:

fetch('https://mysite.pythonanywhere.com/apit?param1=100000&param2=1000', { 
  method: 'GET',
  cache: 'no-cache'
})
.then(function(response) {
  if (response.status !== 200) {
    console.log(response);
    console.log('Looks like there was a problem. Status Code: ' + response.status);
    return;
  }
});

同时清空浏览器缓存(Ctrl+Shift+Delete),再测试一遍。

4. 检查Django视图的重定向逻辑

有没有可能你的视图里手动做了重定向,而且写死了HTTP的URL?比如用redirect('http://mysite.pythonanywhere.com/...'),这会强制跳转到HTTP,触发混合内容错误。

解决办法:
检查视图代码,确保所有重定向都用相对路径,或者用request.build_absolute_uri()来生成正确的HTTPS URL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:22:25