Django 服务器上的 413 Payload Too Large
Posted
技术标签:
【中文标题】Django 服务器上的 413 Payload Too Large【英文标题】:413 Payload Too Large on Django server 【发布时间】:2019-08-06 23:59:08 【问题描述】:每当我们尝试将大文件上传到我们的 Django 后端时,我的团队都会遇到 413 错误:413 Payload too large
我们无法准确确定可接受的最大文件大小 - 它似乎在 1-3MB 范围内摇摆不定。
我们排除的东西:
这不是网络服务器配置问题,因为我们正在运行 本地 Django 服务器(没有网络服务器)
我们认为这不是应用服务器配置问题,因为这发生在多个应用服务器上(./manage.py runserver
和
daphne -p 8000 topknott.asgi:application
)
这不是 Django 模型上的字段的问题,看起来
正常:photo = models.ImageField(blank=True)
谁能发现我们遗漏了什么?
【问题讨论】:
前面有nginx吗? 不,我没有——它在我的机器上本地运行。 (./manage.py runserver
)
我在 Django 代码库中没有看到任何与“413”相关的命中。您是否使用第三方文件存储引擎?无论如何,请尝试调整FILE_UPLOAD_MAX_MEMORY_SIZE
设置。
【参考方案1】:
据我所知,runserver 或 daphne 永远不会返回 413。看起来你在 python 服务器前面有 NGINX。
您可以在 nginx.conf 的 server 块中使用 client_max_body_size 更改限制
server
client_max_body_size 20M;
listen 80;
server_name localhost;
location /
proxy_pass http://127.0.0.1:8000/;
【讨论】:
我在我的机器上本地运行 Django 服务器。这意味着 Python 服务器前面没有网络服务器(没有 NGINX)【参考方案2】:Django 有一个内置机制来防止任何可疑活动。
在你的 settings.py 文件中设置变量
DATA_UPLOAD_MAX_MEMORY_SIZE = 10*1024*1024 # your size limit in bytes
查看文档:https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-DATA_UPLOAD_MAX_MEMORY_SIZE
【讨论】:
【参考方案3】:如果您的团队曾经/正在使用 Django Channels,则在 2.1.7
中引入的一段代码会导致意外的 413 错误(已讨论 here)。不过,这已在 2.3.0
中得到修复。
【讨论】:
你刚刚救了我的命以上是关于Django 服务器上的 413 Payload Too Large的主要内容,如果未能解决你的问题,请参考以下文章
Strapi GraphQL 413 Payload too large request 错误
413 请求实体太大 + Web 服务器连接已关闭 |错误 64
django 2 自定义 jwt_get_username_from_payload_handler
绕过 Elasticbeanstalk 中托管的 api 响应上的 NGINX 413 错误页面
Django Rest with JWT,获取 AttributeError:无效的 API 设置:'JWT_PAYLOAD_HANDLER'