Django配置CORS后仍跨域报错:Next.js调用API遇CORS策略阻止
解决Django + Next.js 跨域请求的Private Network Access限制问题
问题根源
你遇到的不是常规CORS配置错误,而是浏览器的Private Network Access (PNA) 安全限制:非安全上下文的前端(http://0.0.0.0:3000)无法直接访问本地私有网络中的后端服务(http://127.0.0.1:8000),即便配置了django-cors-headers也会被拦截。
可行解决方案
方案1:统一使用localhost访问前后端(推荐开发环境)
启动Next.js时强制绑定localhost地址,避免使用0.0.0.0:
next dev -H localhost
此时前端地址变为http://localhost:3000,后端保持http://localhost:8000,浏览器会判定两者同属本地上下文,不会触发PNA限制。
方案2:配置Django支持私有网络访问
确保django-cors-headers版本≥3.13.0(该版本新增私有网络访问支持),然后在settings.py中添加:
# 允许私有网络访问 CORS_ALLOW_PRIVATE_NETWORK = True
保存后重启Django服务器,后端会返回允许私有网络访问的响应头,浏览器将放行请求。
方案3:临时禁用浏览器PNA限制(仅开发测试用)
不建议长期使用,仅作为临时调试手段:
- Chrome/Edge:在地址栏输入
chrome://flags/#block-insecure-private-network-requests,将选项设置为Disabled,重启浏览器。 - Firefox:在地址栏输入
about:config,搜索network.security.block_insecure_private_network_requests,将值改为false。
验证步骤
- 任选一种方案修改配置后,完全重启Django和Next.js服务
- 重新发起请求,检查浏览器控制台是否仍有跨域报错
内容的提问来源于stack exchange,提问作者user5539903
相关产品推荐
相关产品推荐

