【发布时间】: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 中的 header 和 footer 会显示,传输不会完成但无限期地“挂起”。
注意 2:API 还用于 ical feed 以外的其他目的,在其他情况下,http-header 是不分块的。
【问题讨论】:
-
请注意:iCal/iOS 不支持分块传输编码将是一个非常糟糕的错误,根据 rfc2616,“所有 HTTP/1.1 应用程序必须能够接收和解码“分块”传输-编码[...]'
标签: django http-headers icalendar django-rest-framework transfer-encoding