Google App Engine部署Django DRF项目/packages/接口返回400错误求助
问题根因
你遇到的400错误是Google App Engine的前端代理直接拦截导致的:
根据HTTP RFC规范,GET请求本身不建议携带请求体,Google App Engine的边缘节点会直接拒绝所有携带请求体的GET请求,不会转发到你的Django服务。本地运行时没有这层代理拦截,所以接口可以正常工作。
修复方案
方案1(推荐):修改接口请求方法为POST
你的/packages/接口需要读取请求体传递的查询条件,本身更适合用POST方法实现,修改成本极低:
- 打开views.py,找到
packages_middleware视图的装饰器,修改为:
# 原代码 @api_view(['GET']) @api_view(['POST']) def packages_middleware(request): # 其余逻辑不需要修改
- 客户端调用该接口时,将请求方法从GET改为POST即可。
方案2(不推荐):将查询条件改为URL参数传递
如果必须保留GET方法,你可以把原请求体里的数组参数编码后放到URL的Query参数中传递,视图里改为从request.GET读取参数,不需要读取request.data。这种方案需要同时修改接口逻辑和客户端调用逻辑,改造成本更高。
验证方法
修改完成后重新部署到GAE,用POST方法携带原请求体调用/packages/接口,即可正常获取返回结果。
内容的提问来源于stack exchange,提问作者benjicas
相关产品推荐
相关产品推荐

