Является ли Content-Transfer-Encoding заголовком HTTP? - PullRequest
38 голосов
/ 02 сентября 2011

Я пишу веб-сервис, который возвращает файл PDF в кодировке base64, поэтому я планирую добавить к ответу два заголовка:

Content-Type: application/pdf
Content-Transfer-Encoding: base64

Мой вопрос: является ли Content-Transfer-Encoding вернымHTTP заголовок?Я думаю, что это может быть только для MIME.Если нет, то как мне составить свой HTTP-ответ, чтобы представить факт, что я возвращаю PDF в кодировке base64?Спасибо.

РЕДАКТИРОВАТЬ:

Похоже, HTTP не поддерживает этот заголовок.Из RFC2616, раздел 14 :

Примечание: хотя определение Content-MD5 для HTTP точно такое же, как и в RFC 1864 для тел объектов MIME, существует несколько способов:что применение Content-MD5 к телам сущностей HTTP отличается от его применения к телам сущностей MIME.Во-первых, HTTP, в отличие от MIME, не использует Content-Transfer-Encoding и использует Transfer-Encoding и Content-Encoding.

Любые идеи относительно того, что я должен установитьмои заголовки?Спасибо.

РЕДАКТИРОВАТЬ 2

Многие примеры кода, найденные в комментариях к этой странице справочного руководства по PHP, похоже, предполагают, что на самом деле равно действительный заголовок HTTP:

http://php.net/manual/en/function.header.php

1 Ответ

26 голосов
/ 03 сентября 2011

Согласно RFC 1341 (устарел RFC 2045 ):

Поле заголовка Content-Transfer-Encoding, которое можно использовать дляукажите вспомогательную кодировку, которая была применена к данным, чтобы позволить им проходить через почтовые транспортные механизмы, которые могут иметь ограничения для набора данных или символов.

и более поздние:

Многие типы контента, которые можно было бы с пользой передавать по электронной почте, представлены в их «естественном» формате в виде 8-битных символов или двоичных данных.Такие данные не могут быть переданы по некоторым транспортным протоколам.Например, RFC 821 ограничивает почтовые сообщения 7-битными данными US-ASCII с 1000 символьными строками.

Поэтому необходимо определить стандартный механизм для перекодирования таких данных в 7-битный короткийформат(...) Поле Content-Transfer-Encoding используется для указания типа преобразования, которое использовалось для представления тела приемлемым для транспорта способом.

Поскольку у вас естьwebservice, который не имеет ничего общего с электронной почтой, вы не должны использовать этот заголовок.

Вы можете использовать заголовок Content-Encoding, который указывает, что переданные данные были сжаты (значение gzip).

Я думаю, что в вашем случае достаточно

Content-Type: application/pdf

.Кроме того, вы можете установить заголовок Content-Length, но, на мой взгляд, если вы создаете веб-сервис (это не http-сервер / прокси-сервер), то достаточно Content-Type.Имейте в виду, что некоторые конкретные заголовки (например, Transfer-Encoding), если они не используются надлежащим образом, могут вызвать непредвиденные проблемы со связью, поэтому, если вы не уверены на 100% в использовании какого-либо заголовка - нужен ли он вам или нет - просто не делайтене используй его.

...