Фрагментарное кодирование передачи в фреймворке django rest (nginx+gunicorn)

Я создал API, используя Django Rest Framework, чтобы обслуживать канал из моих моделей django. Содержимое канала проверено и работает во всех протестированных мною приложениях календаря, кроме iCal для iOS. iCal на iOs примет содержимое при копировании/вставке, но не примет импорт из URL-адреса.

Я подозреваю, что причиной этой проблемы является http-заголовок: transfer-encoding: chunked

Я пытаюсь выяснить, почему передача разбита на части, и посмотреть, позволит ли исправление этого 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

примечание-1: при выполнении wget будут отображаться только заголовок и нижний колонтитул из ical_generator, и передача не будет завершена, а «зависнет». " бессрочно.

примечание-2: API также используется для других целей, кроме фида, и в других обстоятельствах http-заголовок не разбивается на части.


person terjeto    schedule 10.01.2014    source источник
comment
просто примечание: iCal/iOS, не поддерживающая кодировку передачи по частям, была бы довольно серьезной ошибкой, согласно rfc2616, «Все приложения HTTP/1.1 ДОЛЖНЫ иметь возможность получать и декодировать кодировку передачи по частям[...]»   -  person sk1p    schedule 10.01.2014


Ответы (1)


Используйте тип содержимого: текст/календарь, и iCal на iOS съест его.

text/html и text/plain разрешены всеми другими инструментами проверки, которые я тестировал, поэтому кажется, что iOS очень придирчива...

person terjeto    schedule 11.02.2014