【问题标题】:Django - UnreadablePostError from time to time?Django - UnreadablePostError 时不时?
【发布时间】:2012-09-14 09:39:48
【问题描述】:

我们有一个基于 Django 的 Web 应用程序,用于从 iOS 设备接收 POST 数据(推送通知令牌)。

总而言之,该应用程序似乎运行良好,我们每小时都会收到 1000-2000 个包含有效数据的 POST。但是,我偶尔会收到来自 Django 的错误日志,其中包含以下数据:

Traceback (most recent call last):

File "/opt/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)

File "/opt/local/lib/python2.7/site-packages/django/views/decorators/vary.py", line 19, in inner_func
response = func(*args, **kwargs)

File "/opt/local/lib/python2.7/site-packages/django_piston-0.2.3-py2.7.egg/piston/resource.py", line 160, in __call__
request.data = request.POST

File "/opt/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 180, in _get_post
self._load_post_and_files()

File "/opt/local/lib/python2.7/site-packages/django/http/__init__.py", line 372, in _load_post_and_files
self._post, self._files = QueryDict(self.body, encoding=self._encoding), MultiValueDict()

File "/opt/local/lib/python2.7/site-packages/django/http/__init__.py", line 328, in body
self._body = self.read()

File "/opt/local/lib/python2.7/site-packages/django/http/__init__.py", line 384, in read
return self._stream.read(*args, **kwargs)

File "/opt/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 98, in read
result = self.buffer + self._read_limited()

File "/opt/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 92, in _read_limited
result = self.stream.read(size)

UnreadablePostError: request data read error

WSGIRequest 转储显示POST: <could not parse>

我一直在尝试查找有关此错误的更多信息,并且我看到的很多内容都表明此错误是由用户在帖子完成之前取消 POST 请求引起的。这是我应该关注的错误,还是应该只设置服务器以过滤掉这些错误消息?我会说我每天可能会收到 8-10 封自动电子邮件。

【问题讨论】:

  • 我认为您可以放心地忽略此类损坏的请求。
  • 这些是已取消的发布请求。但是,您可能需要检查这些是真正的取消还是用户停止了它们,因为请求需要很长时间。对于以后的情况,您需要检查您的应用程序中是否存在任何瓶颈。
  • 文件上传时有这些吗?如果是 - 用户已上传文件、提交并中止请求、会话超时或硬件损坏,因此当它尝试从某个特定内存位置访问文件内容时,由于数据错误而引发错误。
  • 这并不是真的发生在文件上传时;我们正在使用 Unity 游戏引擎,但基本上我们正在对服务器地址进行 POST,该服务器地址只是一个字典,如 `{"token"="1234567890", "sandbox"="False"}。我想如果他们在正确的时间退出游戏,有人可以取消请求吗?如果不是这样,那么我将不得不检查服务器是否存在瓶颈......

标签: django


【解决方案1】:

我不确定您是否还在等待答案,但基本上 cmets 包含大部分信息。所以,只是为了结束这个问题......

这些错误意味着错误的请求到达了服务器。可能有人取消了他们的请求,或者请求在途中被破坏(例如互联网连接不良)等。

您无法直接解决这些错误。但是,您可以查看页面(如果它始终相同)并检查例如加载是否不会花费太长时间。您也可以尝试手动导致错误,以查看它发生的确切时间和原因。除非你找到相关的东西,否则我认为你不需要太担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2021-10-07
    • 2019-08-27
    • 2017-06-19
    相关资源
    最近更新 更多