Django与React对接遇CORS跨域及301重定向问题求助
你的问题核心是Django的URL自动重定向(301)引发跨域请求异常,结合你的配置代码,以下是具体排查和修复步骤:
1. 修复请求URL格式问题
从响应头的Location字段能看到,Django把/api/get重定向到了/api/get/——这是Django默认的APPEND_SLASH行为:当请求URL末尾无斜杠,但URL配置里定义的是带斜杠的路径时,会自动触发重定向。
你的React请求存在两处错误:
- 第一个请求URL缺少Django服务的默认端口号(8000),正确地址应为
http://localhost:8000/api/get/?date=03.24.2023&job_id=131315 job_id参数值末尾多了斜杠,会导致参数解析异常,需删除
修改后的axios代码:
axios.get('http://localhost:8000/api/get/?date=03.24.2023&job_id=131315').then(function (response) { console.log(response); })
2. 可选:关闭Django自动加斜杠行为
如果不想依赖重定向逻辑,可在settings.py中添加:
APPEND_SLASH = False
注意:前提是你的urls.py中定义的路径不带斜杠(比如path('api/get', views.get_log_details)),保持请求与配置一致即可。
3. 确保CORS配置覆盖重定向请求
虽然你设置了CORS_ORIGIN_ALLOW_ALL = True,但重定向后的请求可能需要额外配置允许跨域凭证。在settings.py中添加:
CORS_ALLOW_CREDENTIALS = True
该配置会让CORS头包含Access-Control-Allow-Credentials,确保浏览器接受重定向后的跨域响应。
4. 验证URL配置匹配性
检查urls.py中对应的路径定义,确保与请求URL匹配:
示例(Django REST Framework路由写法):
from django.urls import path from . import views urlpatterns = [ path('api/get/', views.get_log_details, name='get_log_details'), ]
若路径定义为api/get(无斜杠),则调整请求URL去掉末尾斜杠,或修改路径配置为带斜杠。
5. 先验证API本身可用性
在浏览器或Postman中直接访问http://localhost:8000/api/get/?date=03.24.2023&job_id=131315,确认能返回200状态码和正确响应内容,排除API本身的逻辑错误。
内容的提问来源于stack exchange,提问作者breakingcode

