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

Django Web API被遗留设备访问时返回404错误的排查求助

问题排查与解决方案

核心问题1:设备请求路径格式不匹配

从日志能明确看到,设备调用时发送的请求路径是完整的https://192.168.10.120:8001/User/GetUserName.aspx,而Django的路由是基于相对路径(/User/GetUserName.aspx)匹配的,这直接导致路由无法匹配,返回404。Flask对这种带完整域名的路径兼容性更好,所以能正常响应。

解决办法:

  • 检查设备API配置:确认设备是否误将完整URL作为path参数发送,而非仅填写路径部分。若为配置问题,修改设备的API请求路径为/User/GetUserName.aspx,将域名和端口单独配置。
  • 若设备因遗留限制无法修改配置,可在Django中添加兼容处理:
    编写中间件截取请求路径中的完整URL前缀,保留相对路径。示例代码:
    from django.http import HttpRequest
    
    class FixFullUrlPathMiddleware:
        def __init__(self, get_response):
            self.get_response = get_response
    
        def __call__(self, request: HttpRequest):
            # 剥离完整URL前缀,修复请求路径
            if request.path.startswith('https://'):
                _, _, _, path_part = request.path.split('/', 3)
                request.path = f'/{path_part}'
            response = self.get_response(request)
            return response
    
    将该中间件添加到settings.py的MIDDLEWARE列表中(放在靠前位置)。

核心问题2:HTTPS连接配置异常

设备强制使用HTTPS,你之前用自签名证书搭建服务器时无日志输出,大概率是设备验证证书失败后直接终止连接,导致Django未收到请求。

解决办法:

  1. 正确启动Django HTTPS开发服务器:
    Django 3.0+版本可直接用内置服务器启动HTTPS:

    python manage.py runserver 0.0.0.0:8001 --cert /path/to/your/cert.pem --key /path/to/your/key.pem
    

    低版本需借助django-extensions的runserver_plus:

    # 先依赖安装
    pip install django-extensions werkzeug
    # 启动HTTPS服务器
    python manage.py runserver_plus 0.0.0.0:8001 --cert localhost
    
  2. 处理证书信任问题:

    • 将自签名证书导出为.pem或.cer格式,导入到设备的信任证书库(操作参考设备文档)。
    • 若设备支持verify=false选项,为对应API配置禁用证书验证,避免因证书不被信任断开连接。

额外验证步骤

  • 用curl模拟设备的异常请求,验证路径问题:
    curl -X GET "https://192.168.10.120:8001/https://192.168.10.120:8001/User/GetUserName.aspx" -k
    
    (-k参数禁用证书验证),查看是否返回404,确认路径匹配问题。
  • 检查Django的ALLOWED_HOSTS配置:确保settings.py中ALLOWED_HOSTS包含192.168.10.120,避免因主机头验证失败导致的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:06:04