web-dev-qa-db-fra.com

Le Content-Transfer-Encoding est-il un en-tête HTTP?

J'écris un service Web qui renvoie un fichier PDF PDF-encoded), donc mon plan est d'ajouter deux en-têtes à la réponse:

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

Ma question est: Est-ce que Content-Transfer-Encoding un en-tête HTTP valide? Je pense que cela pourrait être uniquement pour MIME. Sinon, comment dois-je créer ma réponse HTTP pour représenter le fait que je retourne un PDF encodé en base64? Merci.

MODIFIER:

Il semble que HTTP ne prend pas en charge cet en-tête. De RFC2616 Section 14 :

Remarque: bien que la définition de Content-MD5 soit exactement la même pour HTTP que dans la RFC 1864 pour les corps d'entité MIME, il existe plusieurs façons dont l'application de Content-MD5 aux corps d'entité HTTP diffère de son application à l'entité MIME- corps. La première est que HTTP, contrairement à MIME, n'utilise pas Content-Transfer-Encoding , et utilise Transfer-Encoding et Content-Encoding.

Des idées pour ce que je devrais définir mes en-têtes? Merci.

EDIT 2

De nombreux exemples de code trouvés dans les commentaires de cette PHP semblent suggérer qu'il s'agit en fait est d'un en-tête HTTP valide:

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

38
Michael

Selon RFC 1341 (rendu obsolète par RFC 2045 ):

Un champ d'en-tête Content-Transfer-Encoding, qui peut être utilisé pour spécifier un codage auxiliaire qui a été appliqué aux données afin de lui permettre de passer par des mécanismes de transport de courrier qui peuvent avoir des limitations de données ou de jeux de caractères.

et ensuite:

De nombreux types de contenu qui pourraient être utilement transportés par courrier électronique sont représentés, dans leur format "naturel", sous forme de caractères 8 bits ou de données binaires. Ces données ne peuvent pas être transmises via certains protocoles de transport. Par exemple, la RFC 821 limite les messages électroniques aux données US-ASCII 7 bits avec 1000 lignes de caractères.

Il est donc nécessaire de définir un mécanisme standard pour recoder ces données dans un format de ligne courte à 7 bits. (...) Le champ Content-Transfer-Encoding est utilisé pour indiquer le type de transformation qui a été utilisé afin de représenter le corps d'une manière acceptable pour le transport.

Étant donné que vous disposez d'un service Web, qui n'a rien de commun avec les e-mails, vous ne devez pas utiliser cet en-tête.

Vous pouvez utiliser Content-Encoding en-tête qui indique que les données transférées ont été compressées (valeur gzip).

Je pense que dans ton cas

Content-Type: application/pdf

est assez. De plus, vous pouvez définir Content-Length en-tête, mais à mon avis, si vous construisez un webservice (ce n'est pas un serveur http/proxy) Content-Type est assez. N'oubliez pas que certains en-têtes spécifiques (par exemple Transfer-Encoding) s'il n'est pas utilisé correctement, peut entraîner des problèmes de communication inattendus, donc si vous n'êtes pas sûr à 100% de l'utilisation de certains en-têtes - si vous en avez vraiment besoin ou non - ne l'utilisez pas.

26
omnomnom