【问题标题】:Chunked transfer-encoding in django rest framework (nginx+gunicorn)django rest框架中的分块传输编码(nginx + gunicorn)
【发布时间】:2014-01-10 11:00:20
【问题描述】:

我已经使用 Django Rest Framework 构建了一个 API,以提供来自我的 django 模型的 ical feed。 提要内容经过验证,可在我测试过的所有日历应用程序中运行,iOS 上的 iCal 除外。 iOs 上的 iCal 将接受复制/粘贴的内容,但不接受从 url 导入。

我怀疑这个问题的原因是 http-header: 传输编码:分块

我正在尝试找出传输被分块的原因,并查看修复此问题是否允许 iOS 读取提要。

下面是一些简化的代码:

渲染器

from rest_framework import renderers

class ICALRenderer(renderers.BaseRenderer):
   media_type = 'text/html'
   format = 'ical'
   charset = 'utf-8'

   def render(self, data, media_type=None, renderer_context=None):
      blob = tools.ical_generator(data, 'My calendar name', 'My calendar description')
      return blob

tools.ical_generator

def ical_generator(events=[], calname='', caldesc=''):
    cal = vobject.iCalendar()
    # build header
    # iterate over events 
    # build footer
    icalstream = cal.serialize()
    return icalstream

note-1: 执行 wget 时,只有 ical_generator 中的 headerfooter 会显示,传输不会完成但无限期地“挂起”。

注意 2:API 还用于 ical feed 以外的其他目的,在其他情况下,http-header 是分块的。

【问题讨论】:

  • 请注意:iCal/iOS 不支持分块传输编码将是一个非常糟糕的错误,根据 rfc2616,“所有 HTTP/1.1 应用程序必须能够接收和解码“分块”传输-编码[...]'

标签: django http-headers icalendar django-rest-framework transfer-encoding


【解决方案1】:

使用 Content-type: text/calendar 和 iOS 上的 iCal 会吃掉它。

我测试过的所有其他验证工具都允许使用 text/html 和 text/plain,所以看来 iOS 非常挑剔...

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 2011-03-14
    • 1970-01-01
    • 2014-08-25
    • 2023-03-16
    • 2022-10-04
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多