Curl请求成功但JavaScript fetch无请求日志——AWS EC2跨子网问题排查
问题根源及解决办法
这不是浏览器故障,核心原因是浏览器的同源策略限制——你的JS网页运行在公有子网的实例(假设其公网IP/端口为A),而请求的目标是私有子网的Django服务器IP(10.0.136.201:8080),两者属于不同的源,浏览器会先发起OPTIONS预检请求,若Django未配置CORS(跨域资源共享)规则,预检请求失败后,浏览器不会发送实际的POST请求,自然服务器端看不到日志。
而curl是命令行工具,不受同源策略约束,直接发送POST请求,所以服务器能正常接收并响应。
解决步骤:
- 安装Django的CORS处理包:
pip install django-cors-headers - 修改Django项目的
settings.py文件:- 在
INSTALLED_APPS中添加:'corsheaders', - 在
MIDDLEWARE中添加(注意要放在django.middleware.common.CommonMiddleware之前):'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', - 配置允许跨域的源:
- 测试环境可临时允许所有源(生产环境禁用):
CORS_ALLOW_ALL_ORIGINS = True - 生产环境指定你的JS网页所在实例的公网IP/端口:
CORS_ALLOWED_ORIGINS = [ "http://你的网页实例公网IP:端口", ]
- 测试环境可临时允许所有源(生产环境禁用):
- 在
- 重启Django服务器,再用浏览器测试fetch请求即可。
内容的提问来源于stack exchange,提问作者COM BOM
相关产品推荐
相关产品推荐

