Groupe de travail Réseau	R. Herriot, Editor : Xerox Corporation	
Request for Comments : 2910	S. Butler : Hewlett-Packard	
RFC rendu obsolète : 2565	P. Moore : Peerless Systems Networking	
Catégorie : Normes	R. Turner : 2wire.com	
septembre 2000	J. Wenn : Xerox Corporation	

Protocole/1.1 d’impression sur Internet : codage et transport

Statut du présent Mémo
Le présent document spécifie un protocole de normalisation Internet pour la communauté Internet, et appelle à discussion et suggestions en vue de son amélioration. Prière de se rapporter à l’édition en cours des "Internet Official Protocol Standards" (normes officielles du protocole Internet) (STD 1) pour connaître l’état de la normalisation et le statut du présent protocole. La distribution du présent mémo n’est pas soumise à restrictions.

Déclaration de copyright

Copyright (C) The Internet Society (2000). Tous droits réservés.

Résumé
Le présent document fait partie d’un ensemble de documents, qui tous ensemble décrivent les divers aspects d’un nouveau protocole d’impression sur Internet (IPP). IPP est un protocole de niveau application qui peut être utilisé pour l’impression distribuée à l’aide des outils et technologies de l’Internet. Le présent document définit les règles de codage des opérations IPP et les attributs d’IPP dans un nouveau type de support MIME Internet appelé "application/ipp". Le présent document définit aussi les règles du transport sur le protocole de transfert par hypertexte (http, Hypertext Transfer Protocol) d’un corps de message dont le type de contenu est "application/ipp". Le présent document définit un nouveau schéma nommé 'ipp' pour identifier les imprimantes et les tâches IPP.

L’ensemble complet des documents IPP comporte :
Objectifs de conception pour un protocole d’impression sur Internet [RFC2567]
Fondements de la structure, modèle et protocole du protocole d’impression sur Internet [RFC2568]
Protocole/1.1 d’impression sur Internet : Modèle et sémantique [RFC2911]
Protocole/1.1 d’impression sur Internet : Codage et transport [RFC2910] (le présent document)
Protocole/1.1 d’impression sur Internet : Guide de mise en œuvre [RFC3196]
Transposition entre les protocoles LPD et IPP [RFC2569]

Le document "Objectifs de conception pour un protocole d’impression sur Internet" porte un large regard sur la fonction d’impression distribuée, et énumère des scénarios réels qui aident à préciser les caractéristiques qu’il est nécessaire d’inclure dans un protocole d’impression pour l’Internet. Il identifie les exigences pour trois types d’utilisateurs : utilisateur final, opérateur, et administrateur. Il fait intervenir un sous ensemble d’exigences d’utilisateur final qui sont satisfaites dans IPP/1.1. Quelques opérations d’opérateur FACULTATIVES ont été ajoutées à IPP/1.1.

Le document "Fondements de la structure, modèle et protocole du protocole d’impression sur Internet" décrit IPP d’un point de vue plus élevé et définit la mission des divers documents qui forment la série des documents de spécification d’IPP. Il donne les fondements des décisions majeures du groupe de travail IPP de l’IETF.

Le document "Protocole/1.1 d’impression sur Internet : Modèle et sémantique" décrit un modèle simplifié avec des objets abstraits, leurs attributs, et leurs opérations qui sont indépendantes du codage et du transport. Le modèle introduit un objet imprimante et un objet tâche. L’objet tâche prend facultativement en charge plusieurs documents par tâche. Il traite aussi des questions de sécurité, d’internationalisation, et d’annuaire.

Le document "Protocole/1.1 d’impression sur Internet : Guide de mise en œuvre" donne des directives et conseils pour la mise en œuvre de clients et objets IPP.

Le document "Transposition entre protocoles LPD et IPP" donne quelques conseils à ceux qui mettent en œuvre des passerelles entre des mises en œuvre IPP et LPD (Line Printer Daemon).

Table des matières
1.	Introduction
2.	Terminologie pour la conformité
3.	Codage de la couche fonctionnement
3.1	Figure du codage
3.1.1	Demande et réponse
3.1.2	Groupe d’attributs
3.1.3	Attribut
3.1.4	Figure du codage d’un attribut à une valeur
3.1.5	Valeur supplémentaire
3.1.6	Autre figure du codage d’une demande ou d’une réponse
3.2	Syntaxe de codage
3.3	Groupe d’attribut
3.4	Paramètres requis
3.4.1	Numéro de version
3.4.2	ID d’opération
3.4.3	Code d’état
3.4.4	id de demande
3.5	Etiquettes
3.5.1	Etiquettes de délimitation
3.5.2	Etiquettes de valeur
3.6	Longueur de nom
3.7	Nom (d’attribut)
3.8	Longueur de valeur
3.9	Valeur (d’attribut)
3.10	Données
4.	Codage de la couche transport
4.1 uri d’imprimante et uri de tâche
5.	Schéma d’URL IPP
6.	Considérations sur l’IANA
7.	Considérations d’internationalisation
8.	Considérations sur la sécurité
8.1	Exigences de conformité pour la sécurité
8.1.1	Authentification abrégée
8.1.2	Sécurité de la couche Transport (TLS)
8.2	Utilisation d’IPP avec TLS
9.	Interopérabilité avec les mises en œuvre IPP/1.0
9.1	Le paramètre "numéro de version"
9.2	Sécurité et schéma d’URL
10.	Références
11.	Adresse des auteurs
12.	Autres participants :
13.	Appendice A : Exemples de protocole
13.1	Demande Tâche d’impression
13.2	Réponse (réussie) à Tâche d’impression
13.3	Réponse (échec) à Tâche d’impression
13.4	Réponse à Tâche d’impression (réussite avec attributs ignorés)
13.5	Demande URI d’imprimante
13.6	Demande Création de tâche
13.7	Demande Obtenir les tâches
13.8	Réponse à Obtenir les tâches
14.	Appendice B : Enregistrement des informations de type de support MIME pour "application/ipp"
15.	Appendice C : Changements par rapport à IPP/1.0

1.	Introduction

Le présent document contient les règles pour les opérations de codage IPP et décrit deux couches : la couche transport et la couche fonctionnement.

La couche transport consiste en demandes ou réponses HTTP/1.1. La RFC 2616 [RFC2616] décrit HTTP/1.1. Le présent document spécifie les en-têtes HTTP qu’accepte une mise en oeuvre de IPP.

La couche fonctionnement consiste en un corps de message dans une demande ou réponse HTTP. Le document "Protocole/1.1 d’impression sur Internet : modèle et sémantique" [RFC2911] définit la sémantique d’un tel corps de message et les valeurs acceptées. Le présent document spécifie le codage d’une opération IPP. Il est donc fait référence au document [RFC2911] mentionné ci-dessus sous le nom de "document modèle IPP" ou simplement "document modèle".

Note : les numéros de version de IPP (1.1) et HTTP (1.1) ne sont pas liés. Ils trouvent juste être 1.1.

2.	Terminologie pour la conformité

Dans le présent document, les mots clés "DOIT", "NE DOIT PAS", "EXIGE", "DEVRA", "NE DEVRA PAS", "DEVRAIT", "NE DEVRAIT PAS", "RECOMMANDE",  "PEUT", et "FACULTATIF" doivent être interprétés comme décrit par la [RFC2119].

3.	Codage de la couche fonctionnement

La couche fonctionnement est la partie corps de message de la demande ou réponse HTTP et elle DOIT contenir une seule demande d’opération IPP ou réponse d’opération IPP. Chaque demande ou réponse consiste en une séquence de valeurs et de groupes d’attributs. Les groupes d’attributs consistent en une séquence d’attributs dont chacun est un nom et une valeur. Les noms et les valeurs sont finalement des séquences d’octets.

Le codage consiste en octets comme type le plus primitif. Il y a plusieurs types construits à partir d’octets, mais trois importants types sont les entiers, les chaînes de caractères et les chaînes d’octets, sur lesquels la plupart des autres types de données sont construits. Chaque chaîne de caractères dans ce codage DOIT être une séquence de caractères où les caractères sont associés à un charset (ensemble de caractères) et un langage naturel. Une chaîne de caractères DOIT être en "ordre de lecture" avec le premier caractère dans la valeur (conformément à l’ordre de lecture) étant le premier caractère dans le codage. Une chaîne de caractères dont le charset associé est US-ASCII dont le langage naturel associé est l’anglais des USA est appelée plus loin une CHAINE-US-ASCII. Une chaîne de caractères dont le charset associé et le langage naturel sont spécifiés dans une demande ou réponse comme décrit dans le document modèle est appelée plus loin une CHAINE-LOCALISÉE. Une chaîne d’octets DOIT être dans "l’ordre du document modèle IPP" avec le premier octet dans la valeur (conformément à l’ordre du document modèle IPP) étant le premier octet dans le codage. Chaque entier dans ce codage DOIT être codé comme un entier algébrique en utilisant le codage binaire à complément à deux avec le format gros boutien (connu aussi comme "l’ordre du réseau" et l’"octet de plus fort poids en premier"). Le nombre d’octets pour un entier DOIT être 1, 2 ou 4, selon l’utilisation dans le protocole. De tels entiers à un octet, appelés à l’avenir OCTET-ALGEBRIQUE, sont utilisés pour le numéro de version et les champs d’étiquette. De tels entiers à deux octets, appelés à l’avenir COURT-ALGEBRIQUE sont utilisés pour l’id-d’opération, le code d’état et les champs de longueur. Les entiers à quatre octets, appelés à l’avenir ENTIERS-ALGEBRIQUES, sont utilisés pour les champs de valeur et l’id de demande.

Les deux sections suivantes présentent le codage de la couche fonctionnement de deux façons :
-  informelle par des figures et la description
-  formelle par la forme de Backus-Naur augmentée (ABNF, Augmented Backus-Naur Form), comme spécifié dans la RFC 2234 [RFC2234].

Une opération de demande ou réponse DOIT utiliser le codage décrit dans ces deux sections.

3.1	Figure du codage
3.1.1	Demande et réponse
Une opération de demande ou réponse est codée comme suit :

   -----------------------------------------------
   |       numéro de version                     |   2 octets - exigé
   -----------------------------------------------
   |          id d’opération (demande)           |
   |                      ou                     |   2 octets - exigé
   |               code d’état (réponse)         |
   -----------------------------------------------
   |               id de demande                 |   4 octets - exigé
   -----------------------------------------------
   |         groupe d’attributs                  |   n octets - 0 ou plus
   -----------------------------------------------
   |       fin d’étiquette d’attributs           |   1 octet  - exigé
   -----------------------------------------------
   |                     données                 |   q octets - facultatif
   -----------------------------------------------

Les trois premiers champs du diagramme ci-dessus contiennent la valeur des attributs décrits au paragraphe 3.1.1 du document modèle.

Le quatrième champ est le champ "groupe d’attribut", et il survient 0 ou plusieurs fois. Chaque champ "groupe d’attribut" représente un seul groupe d’attributs, tel qu’un groupe d’attributs d’opération ou un groupe d’attributs de tâche (voir le document modèle). Le document modèle IPP spécifie les groupes d’attributs demandés et leur ordre pour chaque opération de demande et de réponse.

Le champ "fin d’étiquette d’attributs" est toujours présent, même lorsque "données" n’est pas présent. Le document modèle spécifie pour chaque opération de demande et de réponse si le champ "données" est présent ou absent.

3.1.2	Groupe d’attributs
Chaque champ "groupe d’attributs" est codé comme suit :

   -----------------------------------------------
   |    début d’étiquette de groupe d’attributs  |  1 octet
   ----------------------------------------------------------
   |                   attribut                  | p octets |- 0 ou plus
   ----------------------------------------------------------

Le champ "début-d’étiquette-de-groupe-d’attributs" marque le début d’un champ "groupe-d’attribut" et sa valeur identifie le type de groupe d’attribut, par exemple, groupe d’attributs d’opération contre groupe d’attributs de tâche. Le champ "début-d’étiquette-de-groupe-d’attributs" marque aussi la fin du précédent groupe d’attributs excepté pour le champ "début-d’étiquette-de-groupe-d’attributs" dans le premier champ "groupe-d’attributs" d’une demande ou réponse. Le champ "début-d’étiquette-de-groupe-d’attributs" agit comme une terminaison de "groupe-d’attributs" parce qu’un champ "groupe-d’attributs" ne peut pas résider à l’intérieur d’un autre champ "groupe-d’attributs". Un champ "groupe-d’attributs" contient zéro ou plus champs "attribut".

Note : les valeurs du champ "début-d’étiquette-de-groupe-d’attributs" et du champ "fin-d’étiquette-d’attribut" sont appelées "étiquettes-de-délimitation".

3.1.3	Attribut
Un champ "attribut" est codé comme suit :

   -----------------------------------------------
   |          attribut à une valeur               |  q octets
   ----------------------------------------------------------
   |           valeur supplémentaire              | r octets |- 0 ou plus
   ----------------------------------------------------------

Lorsqu’un attribut est à une seule valeur (par exemple "copies" avec une valeur de 10) ou multi-valeur avec une valeur (par exemple, "côtés-acceptés" avec seulement la valeur 'un côté') il est codé avec seulement un champ "attribut-à-une-valeur". Lorsqu’un attribut est multi-valeur avec n valeurs (par exemple "côtés-acceptés" avec les valeurs 'un-côté' et 'bordure-en-long-de-deux-côtés'), il est codé avec un champ "attribut-à-une-valeur" suivi par n-1 champs "valeur-supplémentaire".

3.1.4	Figure du codage d’un attribut à une valeur
Chaque champ "attribut à une valeur" est codé comme suit :
   -----------------------------------------------
   |         étiquette de valeur                  |   1 octet
   -----------------------------------------------
   |      longueur du nom   (la valeur est u)     |   2 octets
   -----------------------------------------------
   |                     nom                      |   u octets
   -----------------------------------------------
   |    longueur de la valeur (la valeur est v)   |   2 octets
   -----------------------------------------------
   |                     valeur                   |   v octets
   -----------------------------------------------

Un champ "attribut-à-une-valeur" est codé avec cinq sous-champs :

Le champ "étiquette-de-valeur" spécifie la syntaxe d’attribut, par exemple 0x44 la syntaxe d’attribut 'mot-clé'.

Le champ "longueur-du-nom" spécifie la longueur du champ "nom" en octets, par exemple u dans le diagramme ci-dessus ou 15 pour le nom "côtés-acceptés".

Le champ "nom" contient le nom textuel de l’attribut, par exemple "côtés-acceptés".

Le champ "longueur-de-valeur" spécifie la longueur du champ "valeur" en octets, par exemple v dans le diagramme ci-dessus ou 9 pour la valeur (mot-clé) 'un-côté'.

Le champ "valeur" contient la valeur de l’attribut, par exemple, la valeur textuelle 'un-côté'.

3.1.5	Valeur supplémentaire
Chaque champ "valeur-supplémentaire" est codé comme suit :

   -----------------------------------------------
   |          étiquette de valeur                 |   1 octet
   -----------------------------------------------
   |     longueur du nom (la valeur est 0x0000)   |   2 octets
   -----------------------------------------------
   |     longueur de valeur (la valeur est w)     |   2 octets
   -----------------------------------------------
   |                     valeur                   |   w octets
   -----------------------------------------------

Une "valeur-supplémentaire" est codée avec quatre sous-champs :

Le champ "étiquette-de-valeur" spécifie la syntaxe d’attribut, par exemple, 0x44 pour la syntaxe d’attribut 'mot-clé'.

Le champ "longueur-du-nom" a la valeur 0 afin de signifier que c’est une "valeur-supplémentaire". La valeur du champ "longueur-du-nom" distingue un champ "valeur-supplémentaire" ("longueur-du-nom" est 0) d’un champ "attribut à une valeur" ("longueur-du-nom" n’est pas 0).

Le champ "longueur-de-valeur" spécifie la longueur du champ "valeur" en octets, par exemple w dans le diagramme ci-dessus ou 19 pour la valeur (mot-clé) 'bordure-longue-à-deux-côtés'.

Le champ "valeur" contient la valeur de l’attribut, par exemple, la valeur textuelle 'bordure-longue à-deux-côtés'.

3.1.6	Autre figure du codage d’une demande ou d’une réponse
Du point de vue d’un analyseur qui effectue une action fondée sur une valeur "étiquette", le codage consiste en :

   -----------------------------------------------
   |               numéro-de-version             |   2 octets  - exigé
   -----------------------------------------------
   |          id-d’opération    (demande)        |
   |                      ou                     |   2 octets  - exigé
   |               code-d’état (réponse)         |
   -----------------------------------------------
   |                id-de-demande                |   4 octets  - exigé
   -----------------------------------------------------------
   |  étiquette (de délimiteur ou de valeur)     |   1 octet  |
   -----------------------------------------------           |-0 ou plus
   |           vide ou reste de l’attribut       |   x octets |
   -----------------------------------------------------------
   |   étiquette de fin des attributs            |   1 octet   - exigé
   -----------------------------------------------
   |                     données                 |   y octets  - facultatif
   -----------------------------------------------

Ce qui suit montre à quels champs s’attend l’analyseur après chaque type d’"étiquette" :
-	"étiquette-de-début-de-groupe-d’attribut" : attend zéro champs "attribut" ou plus
-	"étiquette-de-valeur" : attend le reste d’un "attribut-à-une-valeur" ou une "valeur-supplémentaire".
-	"étiquette-de-fin-d’attributs" : attend que les champs "attribut" soient finis et qu’il y ait des "données" facultatives.

3.2	Syntaxe de codage
La syntaxe ci-dessous est ABNF [RFC2234] excepté que 'chaînes-de-littéraux' DOIT être sensible à la casse. Par exemple 'a' signifie 'a' minuscule et non 'A' majuscule. De plus, les champs, OCTET-ALGEBRIQUE et COURT-ALGEBRIQUE sont représentés comme valeurs '%x' qui montrent leur gamme de valeurs.

message-ipp = demande-ipp / réponse-ipp
demande-ipp = numéro-de-version id-d’opération id-de-demande 
	*groupe-d’attributs données d’étiquette-de-fin-d’attributs
réponse-ipp = numéro-de-version code-d’état id-de-demande
	*groupe-d’attributs données d’étiquette-de-fin-d’attributs
groupe-d’attributs = étiquette-de-début-de-groupe-d’attribut *attribut

numéro-de-version = numéro-de-version-majeure numéro-de-version-mineure
numéro-de-version-majeure = OCTET-ALGEBRIQUE
numéro-de-version-mineure = OCTET-ALGEBRIQUE

id-d’opération = COURT-ALGEBRIQUE ; transposé du modèle défini ci-dessous
code-d’état = COURT-ALGEBRIQUE ; transposé du modèle défini ci-dessous
id-de-demande = ENTIER-ALGEBRIQUE ; dont la valeur est > 0

attribut = attribut-à-une-valeur *valeur-supplémentaire

attribut-à-une-valeur = étiquette-de-valeur longueur-de-nom nom valeur-longueur valeur
valeur-supplémentaire = étiquette-de-valeur longueur-de-nom-zéro longueur-de-valeur valeur

longeur-de-nom = COURT-ALGEBRIQUE ; nombre d’octets de 'nom'
nom = LALPHA *( LALPHA / CHIFFRE / "-" / "_" / "." )
longueur-de-valeur = COURT-ALGEBRIQUE ; nombre d’octets de 'valeur'
valeur = CHAINE-D’OCTET
données = CHAINE-D’OCTET
longueur-de-nom-zéro = %x00.00 ; longueur-de-nom de 0
étiquette-de-valeur = %x10-FF ; voir au paragraphe 3.7.2
étiquette-de-début-de-groupe-d’attribut = %x00-02 / %04-0F ; voir au paragraphe 3.7.1
étiquette-de-fin-d’attribut = %x03 ; étiquette de 3 ; voir au paragraphe 3.7.1
OCTET-ALGEBRIQUE = OCTET
COURT-ALGEBRIQUE = 2OCTETS
ENTIER-ALGEBRIQUE = 4OCTETS
CHIFFRE = %x30-39    ;  "0" to "9"
LALPHA = %x61-7A   ;  "a" to "z"
OCTET = %x00-FF
CHAINE-D’OCTET= *OCTET
La syntaxe ci-dessous définit des termes supplémentaires auxquels il est fait référence dans le présent document. Cette syntaxe fournit un groupage de remplacement des étiquettes de délimitation.

étiquette-de-limite = étiquette-de-début-de-groupe-d’attribut / étiquette-de-fin-d’attribut ; voir au paragraphe 3.7.1
étiquette-de-limite = %x00-0F ; 	voir au paragraphe 3.7.1
étiquette-de-début-de-groupe-d’attribut = %x00 / étiquette-d’attribut-d’opération / étiquette-d’attributs-de-tâche / étiquette-d’attributs-d’imprimante / étiquette-d’attributs-non-acceptés / %x06-0F
étiquette-d’attribut-d’opération =  %x01 ; 	étiquette de 1
étiquette-d’attributs-de-tâche  =  %x02 ; 	étiquette de 2
étiquette-d’attributs-d’imprimante =  %x04 ; 	étiquette de 4
étiquette-d’attributs-non-acceptés =  %x05 ; 	étiquette de 5

3.3	Groupe d’attribut
Chaque champ "groupe-d’attribut" DOIT être codé avec le champ "étiquette-de-début-de-groupe-d’attribut" suivi par zéro ou plus sous-champs "attribut".

Le Tableau ci-dessous établit la correspondance entre le nom de groupe du document modèle et la valeur du champ "étiquette-de-début-de-groupe-d’attribut" :

Groupe du document modèle	Valeurs du champ 
"étiquette-de-début-de-groupe-d’attribut"	
Attributs d’opération 	"étiquette-d’attributs-d’opération"	
Attributs de gabarit de tâche	"étiquette-d’attributs-de-tâche"	
Attributs d’objet tâche	"étiquette-d’attributs-de-tâche"	
Attributs non pris en charge	"étiquette-d’attributs-non-acceptée"	
Attributs demandés 
(Obtenir-les-attributs-de-tâche)	"étiquette-d’attributs-de-tâche"	
Attributs demandés 
(Obtenir-les-attributs-d’imprimante)	"étiquette-d’attributs-d’imprimante"	
Contenu du document	position spéciale, comme décrit ci-dessus	

Pour chaque demande et réponse d’opération, le document modèle prescrit les groupes d’attributs exigés et facultatifs, avec leur ordre. Au sein de chaque groupe d’attribut, le document modèle prescrit les attributs exigés et facultatifs, avec leur ordre.

Lorsque le document modèle exige un groupe d’attributs dans une demande ou réponse et que le groupe d’attribut ne contient aucun attribut, une demande ou réponse DEVRAIT coder le groupe d’attributs avec le champ "étiquette-de-début-de-groupe-d’attribut" suivi par zéro champ "attribut". Par exemple, si le client demande un seul attribut non pris en charge avec l’opération Obtenir-les-attributs-d’imprimante, l’imprimante ne DOIT retourner aucun champ "attribut", et elle DEVRAIT retourner un champ "étiquette-de-début-de-groupe-d’attribut" pour le groupe d’attributs d’imprimante. Le groupe des attributs non acceptés n’en est pas un exemple. Conformément au document modèle, le groupe des attributs non acceptés ne DEVRAIT être présent que si le groupe des attributs non acceptés contient au moins un attribut.

Un récepteur d’une demande DOIT être capable de traiter ce qui suit comme des équivalents de groupe d’attributs vide :
a)	Un champ "étiquette-de-début-de-groupe-d’attributs" avec zéro champ "attribut" suivant.
b)	Un champ "étiquette-de-début-de-groupe-d’attributs" attendu mais manquant.

Lorsque le document modèle exige une séquence d’un nombre inconnu de groupes d’attributs, chacun du même type, le codage DOIT contenir un champ "étiquette-de-début-de-groupe-d’attributs" pour chaque groupe d’attribut même lorsqu’un champ "groupe-d’attributs" ne contient aucun sous-champ "attribut". Par exemple, l’opération Obtenir-les-tâches peut ne retourner aucun attribut pour certaines tâches et pas pour d’autres. Le champ "étiquette-de-début-de-groupe-d’attributs" suivi par zéro champ "attribut" dit au récepteur qu’il y a une tâche dans la file d’attente pour laquelle aucune information n’est disponible, excepté qu’elle est dans la file.

3.4	Paramètres requis
Certains éléments d’opération sont appelés paramètres dans le document modèle [RFC2911]. Ils DOIVENT être codé dans une position particulière et NE DOIVENT PAS apparaître comme des attributs d’opération. Ces paramètres sont décrits dans les paragraphes ci-dessous.

3.4.1	numéro-de-version
Le champ "numéro-de-version" DOIT consister en numéro-de-version majeure et mineure, chacun d’eux DOIT être représenté par un OCTET-ALGEBRIQUE. Le numéro-de-version majeure DOIT être le premier octet du codage et le numéro-de-version mineure DOIT être le second octet du codage. Le protocole décrit dans le présent document DOIT avoir un numéro-de-version majeure de 1 (0x01) et un numéro-de-version mineure de 1 (0x01). L’ABNF pour ces deux octets DOIT être %x01.01.

3.4.2	id-d’opération
Le champ "id-d’opération" DOIT contenir une valeur id-d’opération définie dans le document modèle. La valeur DOIT être codée comme un COURT-ALGEBRIQUE et DOIT être dans les troisième et quatrième octets du codage d’une demande d’opération.

3.4.3	code-d’état
Le champ "code-d’état" DOIT contenir une valeur de code-d’état définie dans le document modèle. La valeur DOIT être codée comme un COURT-ALGEBRIQUE et elle DOIT être dans les troisième et quatrième octets du codage d’une réponse d’opération.

Le code-d’état est un attribut d’opération dans le document modèle. Dans le protocole, le code-d’état est dans une position particulière, en-dehors des attributs d’opération.

Si un code-d’état IPP est retourné, le code-d’état HTTP DOIT alors être 200 (réussite-ok). Avec toute autre valeur de code-d’état HTTP, la réponse HTTP NE DOIT PAS contenir un corps de message, et donc aucun code d’état IPP n’est retourné.

3.4.4	id-de-demande
Le champ "id de demande" DOIT contenir une valeur id de demande comme défini dans le document modèle. La valeur DOIT être codée comme un SIGNED-INTEGER et elle DOIT être dans les octets six à huit du codage.

3.5	Etiquettes
Il y a deux sortes d’étiquettes :
-	étiquettes de délimitation : elles délimitent les sections majeures du protocole, à savoir les attributs et les données
-	étiquettes de valeur : elles spécifient le type de chaque valeur d’attribut.

3.5.1	Etiquettes de délimitation
Le tableau suivant spécifie les valeurs pour les étiquettes de délimitation :

Valeur d’étiquette (Hex)	Signification	
0x00	Réservé pour la définition de futurs documents de normalisation IETF	
0x01	"étiquette-d’attributs-d’opération"	
0x02	"étiquette-d’attributs-de tâche"	
0x03	"étiquette-de-fin-d’attributs"	
0x04	"étiquette-d’attributs-d’imprimante"	
0x05	"étiquette-d’attributs-non-acceptés"	
0x06-0x0f	réservé pour de futurs délimiteurs dans les documents de normalisation IETF	

Lorsqu’un champ "étiquette-de-début-de-groupe d’attributs" survient dans le protocole, il signifie que zéro ou plus attributs suivants jusqu’à la prochaine étiquette de délimitation DOIVENT être des attributs appartenant au groupe d’attributs spécifié par la valeur de "étiquette-de-début-de-groupe-d’attributs". Par exemple, si la valeur de "étiquette-de-début-de-groupe-d’attributs" est 0x01, les attributs suivants DOIVENT être membres du groupe d’attributs d’opération.

"étiquette-de-fin-d’attributs" (valeur 0x03) DOIT survenir exactement une fois dans une opération. Elle DOIT être la dernière "étiquette-de-délimitation". Si l’opération a un groupe de contenu-de-document, les données de document dans ce groupe DOIVENT suivre "étiquette-de-fin-d’attributs".

L’ordre et la présence des champs "groupe-d’attributs" (dont le début est marqué par le sous-champ "étiquette-de-début-de-groupe-d’attributs") pour chaque demande d’opération et chaque réponse d’opération DOIT être celle définie dans le document modèle. Pour des détails complémentaires, voir au paragraphes 3.7 "Nom (d’attribut) et 13 "Appendice A : exemples de protocole".

Une imprimante DOIT traiter une "étiquette-de-délimitation" (valeurs de 0x00 à 0x0F) différemment d’une "étiquette de valeur" (valeurs de 0x10 à 0xFF) de sorte que l’imprimante sache qu’il y a un groupe entier d’attributs qu’elle ne comprend pas par opposition à une seule valeur qu’elle ne comprend pas.

3.5.2	Etiquettes de valeur
Les tableaux restants indiquent les valeurs pour le champ "étiquette-de-valeur", qui est le premier octet d’un attribut. Le champ "étiquette-de-valeur" spécifie le type de la valeur de l’attribut.

Le tableau suivant spécifie les valeurs "hors bande" pour le champ "étiquette de valeur".

Valeur d’étiquette (Hex)	Signification	
0x10	non acceptée	
0x11	réservé pour 'par défaut' pour définition dans un futur document de normalisation IETF	
0x12	inconnue	
0x13	non valeur	
0x14-0x1F	réservé pour valeurs "hors bande" dans de futurs documents de normalisation de l’IETF.	

Le tableau suivant spécifie les valeurs d’entier pour le champ "étiquette-de-valeur" :

Valeur d’étiquette (Hex)	Signification	
0x20	réservé pour définition dans un futur document de normalisation IETF	
0x21	entier	
0x22	booléen	
0x23	énumération	
0x24-0x2F	réservé pour des types entiers pour définition dans de futurs documents de normalisation de l’IETF.	

NOTE : 0x20 est réservé pour "entier générique" s’il devait jamais en être besoin.

Le tableau suivant spécifie les valeurs de chaîne d’octets pour le champ "étiquette de valeur" :

Valeur d’étiquette (Hex)	Signification	
0x30 	chaîneD’Octets de format non spécifié	
0x31	dateHeure	
0x32	résolution	
0x33	gammeD’Entiers	
0x34	réservé pour définition dans un futur document de normalisation de l’IETF	
0x35	texteAvecLangage	
0x36	nomAvecLangage	
0x37-0x3F	réservé pour des définitions de type de chaînes d’octets dans de futurs documents de normalisation de l’IETF.	

Le tableau suivant spécifie les valeurs de chaîne-de-caractères pour le champ "étiquette-de-valeur" :

Valeur d’étiquette (Hex)	Signification	
0x40	réservé pour définition dans un futur document de normalisation de l’IETF	
0x41	texteSansLangage	
0x42	nomSansLangage	
0x43	réservé pour définition dans un futur document de normalisation de l’IETF	
0x44	mot-clé	
0x45	uri	
0x46	schémaU’Uri	
0x47	charset	
0x48	langageNaturel	
0x49	typeDeSupportMime	
0x4A-0x5F	réservé pour des définitions de type de chaîne de caractères dans de futurs documents de normalisation de l’IETF.	

NOTE : 0x40 est réservé pour "chaîne-de-caractères-générique" s’il devait jamais en être besoin.

NOTE : une valeur d’attribut a toujours un type, qui est explicitement spécifié par son étiquette ; une telle valeur d’étiquette est "nomSansLangage". Un nom d’attribut a un type implicite, qui est mot-clé.

Les valeurs 0x60-0xFF sont réservées pour de futures définitions de type dans des documents de normalisation de l’IETF.

L’étiquette 0x7F est réservée pour étendre les types au-delà des 255 valeurs disponibles avec un seul octet. Une valeur d’étiquette de 0x7F DOIT signifier que les 4 premiers octets du champ valeur sont interprétés comme la valeur de l’étiquette. Noter que cette extension future n’affecte pas les analyseurs qui ne sont pas au courant de cette étiquette particulière. L’étiquette est traitée comme toute autre étiquette inconnue, et la longueur de valeur spécifie la longueur d’une valeur, qui contient une valeur que l’analyseur traite de façon atomique. Les valeurs de 0x00 à 0x37777777 sont réservées pour définition dans les futurs documents de normalisation de l’IETF. Les valeurs de 0x40000000 à 0x7FFFFFFF sont réservées pour des extensions des fabricants.

3.6	longueur-de-nom
Le champ "longueur-de-nom" DOIT consister en un COURT-ALGEBRIQUE. Ce champ DOIT spécifier le nombre d’octets dans le champ "nom" qui suit immédiatement. La valeur de ce champ exclut les deux octets du champ "longueur-de-nom". Par exemple, si le champ "nom" contient "côtés", la valeur de ce champ est 5.

Si un champ "longueur-de-nom" a une valeur de zéro, le champ "nom" suivant DOIT être vide, et la valeur suivante DOIT être traitée comme une valeur supplémentaire pour l’attribut codé dans le plus proche champ "attribut-à-une-valeur" précédent. Au sein d’un groupe d’attributs, si deux ou plus attributs ont le même nom, le groupe d’attributs est mal formé (voir au paragraphe 3.1.3 de la [RFC2911]). Le nom de longueur zéro est le seul mécanisme pour les attributs à plusieurs valeurs.

3.7	Nom (d’attribut)
Le champ "nom" DOIT contenir le nom d’un attribut. Le document modèle [RFC2911] spécifie de tels noms.

3.8	Longueur de valeur
Le champ "longueur-de-valeur" DOIT consister en un COURT-ALGEBRIQUE. Ce champ DOIT spécifier le nombre d’octets dans le champ "valeur" suivant immédiatement. Les valeurs de ce champ excluent les deux octets du champ "longueur-de-valeur". Par exemple, si le champ "valeur" contient la valeur de mot-clé (texte) 'un côté', la valeur de ce champ est 9.

Pour tout type représenté par des entiers algébriques binaires, l’envoyeur DOIT coder la valeur en exactement quatre octets.

Pour tout type représenté par des chaînes de caractères, l’envoyeur DOIT coder la valeur avec tous les caractères de la chaîne et sans aucun caractère de bourrage.

Pour les champs"étiquette-de-valeur" "hors-bande" définis dans le présent document, tels que "non-accepté", la "longueur-de-valeur" DOIT être 0 et la "valeur" vide ; la "valeur" n’a pas de signification lorsque "étiquette-de-valeur" a une de ces valeurs "hors-bande". Pour les champs "étiquette-de-valeur" "hors-bande" de l’avenir, la même règle s’appliquera à moins que la définition n’établisse explicitement que la "longueur de valeur" PEUT être différente de zéro et la "valeur" non vide.

3.9	Valeur (d’attribut)

Les types de syntaxe (spécifiés par le champ "étiquette-de-valeur") et la plupart des détails de la représentation des valeurs d’attribut sont définies dans le document modèle IPP. Le Tableau ci-dessous abonde les informations du document modèle, et définit les types de syntaxe provenant du document modèle sous la forme de cinq types de base, définis à la section 3, "Codage de la couche fonctionnement". Les cinq types sont CHAINE-US-ASCII, CHAINE-LOCALISEE, ENTIER-ALGEBRIQUE, COURT-ALGEBRIQUE, OCTET-ALGEBRIQUE, et CHAINE-D’OCTET.

Syntaxe de la valeur d’attribut	Codage	
texteSansLangage, nomSansLangage	CHAINE-LOCALISEE.	
textAvecLangage	CHAINE-D’OCTET consistant en 4 champs :
a. un COURT-ALGEBRIQUE qui est le nombre d’octets dans le champ suivant,
b. une valeur de type langage naturel,
c. un COURT-ALGEBRIQUE qui est le nombre d’octets dans le champ suivant,
d. une valeur du type texteSansLangage. La longueur d’une valeur texteSansLangage DOIT être 4 + la valeur du champ a + la valeur du champ c.	
nomAvecLangage	CHAINE-D’OCTET consistant en 4 champs :
a. un COURT-ALGEBRIQUE qui est le nombre d’octets dans le champ suivant,
b. une valeur de type langage naturel,
c. un COURT-ALGEBRIQUE qui est le nombre d’octets dans le champ suivant,
d. une valeur du type texteSansLangage. La longueur d’un nomSansLangage DOIT être 4 + la valeur du champ a + la valeur du champ c.	
charset, langageNaturel, typeDeSupportMime, mot-clé, uri, et schémaD’Uri	CHAINE-US-ASCII.	
booléen	OCTET-ALGEBRIQUE où 0x00 est 'faux' et 0x01 est 'vrai'.	
entier et enum 	un ENTIER-ALGEBRIQUE.	
dateHeure	CHAINE-D’OCTET consistant en onze octets dont le contenu est défini par "DateEtHeure" dans la RFC 1903 [RFC1903].	
résolution 	CHAINE-D’OCTET consistant en neuf octets de deux ENTIERS-ALGEBRIQUES suivis par un OCTET-ALGEBRIQUE. Le premier ENTIER-ALGEBRIQUE contient la valeur de résolution de direction en alimentation croisée. Le second ENTIER-ALGEBRIQUE contient la valeur de résolution de direction d’alimentation. L’OCTET-ALGEBRIQUE contient les unités.	
gammeD’Entier	Huit octets consistant en deux ENTIERS-ALGEBRIQUES. Le premier ENTIER-ALGEBRIQUE contient la limite inférieure et le second ENTIER-ALGEBRIQUE contient la limite supérieure.	
1setOf  X	Codage conformément aux règles pour un attribut avec plus d’une valeur. Chaque valeur X est codée conformément aux règles de codage de son type.	
chaîneD’Octet	CHAINE-D’OCTET	

Le type de syntaxe d’attribut de la valeur détermine son codage et la valeur de son "étiquette-de-valeur".

3.10	Données

Le champ "données" DOIT inclure toutes données exigées par l’opération

4.	Codage de la couche transport

HTTP/1.1 [RFC2616] est la couche transport pour ce protocole.

La couche fonctionnement a été conçue avec l’hypothèse que la couche transport contient les informations suivantes :
-	l’URI de la tâche cible ou de l’opération d’imprimante
-	la longueur totale des données dans la couche fonctionnement, comme une seule longueur ou comme une séquence de tronçons dont chacun a sa longueur.

Il est EXIGÉ qu’une mise en œuvre d’imprimante prenne en charge HTTP sur le port bien connu 631 alloué par l’IANA (le port IPP par défaut), bien qu’une mise en œuvre d’imprimante puisse aussi bien prendre en charge HTTP sur un autre port.

Chaque opération HTTP DOIT utiliser la méthode POST dans laquelle l’URI-de-demande est l’objet cible de l’opération, et le "Type-de-contenu" du corps de message dans chaque demande et réponse DOIT être "application/ipp". Le corps de message DOIT contenir la couche fonctionnement et DOIT avoir la syntaxe décrite au paragraphe 3.2 "Syntaxe de codage". Une mise en oeuvre client DOIT adhérer aux règles pour les clients décrites pour HTTP1.1 [RFC2616]. Une mise en œuvre d’imprimante (serveur) DOIT adhérer aux règles pour un serveur d’origine décrites pour HTTP1.1 [RFC2616].

Un serveur IPP envoie une réponse pour chaque demande qu’il reçoit. Si un serveur IPP détecte une erreur, il PEUT envoyer une réponse avant qu’il ait lu la demande entière. Si la couche HTTP du serveur IPP termine avec succès le traitement des en-têtes HTTP, elle PEUT envoyer une réponse intermédiaire, telle que "100 Continue", sans données IPP avant d’envoyer la réponse IPP. Un client DOIT s’attendre à une telle variété de réponses de la part d’un serveur IPP. Pour des informations complémentaires sur HTTP/1.1, consulter les documents HTTP [RFC2616].

Un serveur HTTP DOIT prendre en charge le tronçonnement des demandes IPP, et un client IPP DOIT prendre en charge le tronçonnement des réponses IPP conformément à HTTP/1.1 [RFC2616]. Note : cette règle cause un conflit avec les mises en œuvre non-conformes de HTTP/1.1 qui ne prennent pas en charge le tronçonnement pour les méthodes POST, et cette règle peut causer un conflit avec les mises en œuvre non-conformes de HTTP/1.1 qui ne prennent pas en charge le tronçonnement pour les scripts CGI.

4.1	uri-d’imprimante et uri-de-tâche

Tous les objets Imprimante et objets Tâche sont identifiés par un Identifiant de ressource uniforme (URI) [RFC2396] de sorte qu’ils puissent être référencés de façon persistante et non ambiguë. Dans la mesure ou tout URL est une forme spécialisée d’un URI, même si le terme plus générique d’URI est utilisé tout au long du reste du présent document, il est destiné aussi à recouvrir la notion plus spécifique d’URL.

Certains éléments d’opération sont codés deux fois, une fois comme URI-de-demande sur la ligne de demande http, et une seconde fois comme attribut d’opération EXIGÉ dans l’entité application/ipp. Ces attributs sont l’URI cible de l’opération et sont appelés uri-d’imprimante et uri-de-tâche.
Note : L’URI cible est inclus deux fois dans une opération qui se réfère au même objet IPP, mais les deux URI NE DOIVENT PAS être littéralement identiques. L’un peut être un URI relatif et l’autre peut être un URI absolu. HTTP/1.1 permet aux clients de générer et envoyer un URI relatif plutôt qu’un URI absolu. Un URI relatif identifie une ressource avec le domaine du serveur HTTP, mais n’inclut pas de schéma, hôte ou port. Les affirmations suivantes caractérisent l’utilisation des URL dans la transposition d’IPP en HTTP/1.1 :
1.	Bien que cela puisse être redondant, un client DOIT fournir la cible de l’opération à la fois comme attribut d’opération et comme URI à la couche HTTP. La raison de cette décision est de maintenir un ensemble cohérent de règles pour transposer application/ipp à des couches de communication qui peuvent être nombreuses, même lorsque les URL ne sont pas utilisés comme mécanisme d’adressage dans la couche transport.
2.	Bien que ces deux URL puissent n’être pas littéralement identiques (l’un étant relatif et l’autre étant absolu), ils DOIVENT tous deux référencer le même objet IPP. Cependant, une imprimante PEUT NE PAS vérifier que les deux URL référencent le même objet IPP, et PEUT NE PAS prendre de mesures si elle détermine que les deux URL sont différents.
3.	L’URI dans la couche HTTP est relatif ou absolu et sert au serveur HTTP pour acheminer la demande HTTP à la ressource appropriée par rapport à ce serveur HTTP. Le serveur HTTP n’a pas besoin d’être au courant de l’URI au sein de la demande d’opération.
4.	Une fois que la ressource de serveur HTTP commence à traiter la demande HTTP, elle peut obtenir la référence à l’objet d’imprimante IPP approprié de l’URI HTTP (en se servant du contexte du serveur HTTP pour les URL relatifs) ou de l’URI au sein de la demande d’opération ; le choix est celui de la mise en œuvre.
5.	Les URI HTTP peuvent être relatifs ou absolus, mais l’URI cible dans l’opération DOIT être un URI absolu.

5.	Schéma d’URL IPP

Le document IPP/1.1 définit un nouveau schéma 'ipp' comme valeur d’un URL qui identifie un objet imprimante IPP ou un objet de tâche IPP. Les attributs IPP qui utilisent le schéma 'ipp' sont spécifiés ci-dessous. Parce que la couche HTTP ne prend pas en charge le schéma 'ipp', un client DOIT transposer les URL 'ipp' en URL 'http', et suivre ensuite les règles HTTP [RFC2616] [RFC2617] pour la construction d’une ligne de requête et des en-têtes HTTP. La transposition est simple parce que le schéma 'ipp' implique toute la même sémantique de protocole que le schéma 'http' [RFC2616], excepté qu’il représente un service d’impression et que le numéro de port implicite (par défaut) qu’utilisent les clients pour se connecter à un serveur est le port 631.

Dans le reste de la présente section, le terme 'ipp-URL' signifie un URL dont le schéma est 'ipp' et dont le port implicite (par défaut) est 631. Le terme 'http-URL' signifie un URL dont le schéma est 'http', et le terme 'https-URL' signifie un URL dont le schéma est 'https'.

Un client et un objet IPP (c’est-à-dire, le serveur) DOIVENT prendre en charge la valeur ipp-URL dans les attributs IPP suivants :
attributs de tâche :
uri-de-tâche
uri-de-tâche-d’imprimante
attributs d’imprimante :
uri-d’imprimante-pris-en-charge
attributs d’opération :
uri-de-tâche
uri-d’imprimante

Chacun des attributs ci-dessus identifie un objet imprimante ou tâche. L’URL-ipp est conçu comme la valeur des attributs de la liste, et pour aucun autre attribut. Tous ces attributs ont un type de syntaxe de 'uri', mais il y a des attributs avec un type de syntaxe de 'uri' qui n’utilisent pas le schéma 'ipp', par exemple, 'plus-d’info-de-tâche'.

Si une imprimante enregistre son URL dans un service d’annuaire, l’imprimante DOIT enregistrer un URL-ipp.

Les interfaces d’utilisateurs sont en dehors du domaine d’application du présent document. Mais si le logiciel expose les valeurs URL-ipp de l’un des cinq attributs ci-dessus à un utilisateur humain, il est EXIGÉ que l’humain voie l’URL-ipp comme il est.

Lorsqu’un client envoie une demande, il DOIT convertir un URL-ipp cible en URL-http cible pour la couche HTTP conformément aux règles suivantes :
1.	changer le schéma 'ipp' en 'http'
2.	ajouter un port 631 explicite si l’URL ne contient pas de port explicite. Note : le port 631 est le port bien connu alloué par l’IANA pour le schéma 'ipp'.

Le client DOIT utiliser l’URL-http cible à la fois dans la ligne de requête HTTP et dans les en-têtes HTTP, comme spécifié par HTTP [RFC2616] [RFC2617]. Cependant, le client DOIT utiliser l’URL-ipp cible pour la valeur d’attribut d’opération "uri-d’imprimante" ou "uri-de-tâche" au sein du corps d’application/ipp de la demande. Le serveur DOIT utiliser l’URL-ipp pour la valeur des attributs "uri-d’imprimante", "uri-de-tâche" ou "uri-d’imprimante-pris-en-charge" au sein du corps d’application/ipp de la réponse.

Par exemple, lorsqu’un client IPP envoie directement une demande (c’est-à-dire, sans mandataire) un URL-ipp "ipp://myhost.com/myprinter/myqueue", il ouvre une connexion TCP avec le port 631 (le port ipp implicite) sur l’hôte "myhost.com" et envoie les données suivantes :
POST /myprinter/myqueue HTTP/1.1
Hôte : myhost.com:631
Type de contenu : application/ipp
Codage de transfert : tronçonné
    ...
"uri d’imprimante" "ipp://myhost.com/myprinter/myqueue"
(codé en corps de message application/ipp)
    ...

Un autre exemple serait qu’un client IPP envoie la même demande que ci-dessus via un mandataire "myproxy.com" ; il ouvre une connexion TCP avec le port mandataire 8080 sur l’hôte mandataire "myproxy.com" et envoie les données suivantes :
POST http://myhost.com:631/myprinter/myqueue   HTTP/1.1
Hôte : myhost.com:631
Type de contenu : application/ipp
Codage de transfert : tronçonné
    ...
"uri d’imprimante" "ipp://myhost.com/myprinter/myqueue"
(codé en corps de message application/ipp)
    ...

Le mandataire se connecte alors au serveur IPP d’origine avec des en-têtes qui sont les mêmes que dans l’exemple "sans mandataire" ci-dessus.

6.	Considérations sur l’IANA

La présente section décrit les procédures d’allocation de codage pour les extensions de normes IETF suivantes et les extensions de fabricants au document IPP/1.1 Codage et Transport 
1.	syntaxes d’attribut – voir au paragraphe 6.3 de la [RFC2911]
2.	groupes d’attributs - voir au paragraphe 6.5 de la [RFC2911]
3.	valeurs d’attribut hors bande - voir au paragraphe 6.7 de la [RFC2911].

Ces extensions suivent les procédures d’enregistrement de "type2" définies à la section 6 de la [RFC2911]. Les extensions enregistrées pour être utilisées avec IPP/1.1 sont FACULTATIVES pour la conformité d’objet client et IPP au document IPP/1.1 Codage et Transport.

Ces procédures d’extension sont conformes aux lignes directrices telles qu’établies par l’IESG [IANA-CON]. La section 11 de la [RFC2911] décrit comment proposer la prise en considération de nouveaux enregistrements. L’IANA rejettera les propositions d’enregistrement qui ne comportent pas les informations exigées ou ne suivent pas le format approprié décrit à la section 11 de la [RFC2911]. Le document IPP/1.1 Codage  et Transport peut aussi être étendu par une RFC appropriée qui spécifie une des extensions ci-dessus.

7.	Considérations d’internationalisation

Voir la section sur "Considérations d’internationalisation" dans le document "Protocole/1.1 d’impression sur Internet : Modèle et sémantique" [RFC2911] pour des informations sur l’internationalisation. Le présent document n’ajoute aucune question supplémentaire.

8.	Considérations sur la sécurité

Le document Modèle et sémantique IPP [RFC2911] discute des exigences de sécurité de haut niveau (authentification du client, authentification du serveur et confidentialité du fonctionnement). L’authentification du client est le mécanisme par lequel le client prouve son identité au serveur d’une façon sécurisée. L’authentification du serveur est le mécanisme par lequel le serveur prouve son identité au client d’une façon sécurisée. La confidentialité du fonctionnement est définie comme un mécanisme de protection du fonctionnement contre l’espionnage.

8.1	Exigences de conformité pour la sécurité
La présente section définit les exigences de sécurité pour les clients et les objets IPP.

8.1.1	Authentification abrégée
Les clients IPP DOIVENT prendre en charge :
L’authentification abrégée [RFC2617].
MD5 et MD5-sess DOIVENT être mis en œuvre et pris en charge.
Le dispositif d’intégrité du message PEUT NE PAS être utilisé.
Les imprimantes IPP DEVRAIT prendre en charge :
L’authentification abrégée [RFC2617].
MD5 et MD5-sess DOIVENT être mis en œuvre et pris en charge.
Le dispositif d’intégrité du message PEUT NE PAS être utilisé.

Les raisons pour lesquelles les imprimantes IPP DEVRAIENT (plutôt que DOIVENT) prendre en charge l’authentification abrégée sont :
1.	Alors que l’authentification du client est importante, il y a une certaine classe d’imprimantes où cela n’a pas de sens. Plus précisément, un appareil de bas de gamme avec un espace de mémoire morte limité et un faible débit de papier peut n’avoir pas besoin d’authentification du client. Cette classe d’appareils a normalement besoin de concepteurs de micro logiciels pour faire les transactions entre les protocoles et les fonctionnalités pour arriver aux solutions de plus faible coût possibles. Ce n’est pas simplement la taille du code qui est gravée dans les décisions du concepteur, mais aussi les essais, la maintenance, la capacité d’utilisation et la réponse aux besoins du marché pour chaque caractéristique livrée au consommateur. Forcer de tels appareils de bas de gamme à fournir de la sécurité afin d’exciper de la conformité à IPP/1.1 n’aurait aucun sens commercial et pourrait éventuellement entraver l’adoption de la norme.
2.	Les appareils d’impression qui ont un fort volume de débit et ont de l’espace de mémoire morte disponible ont un argument irrésistible en faveur de la prise en charge de l’authentification du client car elle est la sauvegarde de l’appareil contre un accès non autorisé. Ces appareils seraient sujets à de lourdes pertes de produits d’entretien et de papier si des accès non autorisés devaient survenir.

8.1.2	Sécurité de la couche Transport (TLS)
Les imprimantes IPP DEVRAIENT prendre en charge la sécurité de la couche Transport (TLS) [RFC2246] pour l’authentification du serveur et la confidentialité du fonctionnement. Les imprimantes IPP PEUVENT aussi prendre en charge TLS pour l’authentification du client. Si une imprimante IPP prend en charge TLS, elle DOIT prendre en charge la suite de chiffrement TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA comme recommandé par la RFC 2246 [RFC2246]. Toutes les autres suites de chiffrement sont FACULTATIVES. Une imprimante IPP PEUT prendre en charge l’authentification de base (décrite dans HTTP/1.1 [RFC2617]) pour l’authentification du client si le canal est sécurisé. TLS avec la suite de chiffrement recommandée ci-dessus peut fournir un tel canal sécurisé.

Si un client IPP prend en charge TLS, il DOIT prendre en charge la suite de chiffrement TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA comme recommandé par la RFC 2246 [RFC2246]. Toutes les autres suites de chiffrement sont FACULTATIVES.

Le document IPP Modèle et sémantique définit deux attributs d’imprimante ("authentification-d’uri-prise-en-charge" et "sécurité-d’uri-prise-en-charge") que le client peut utiliser pour découvrir la politique de sécurité d’une imprimante. Ce document souligne aussi les considérations spécifiques d’IPP sur la sécurité et devrait être la principale référence pour les implications sur la sécurité par rapport au protocole IPP lui-même. Pour la compatibilité amont avec IPP version 1.0, les clients et imprimantes IPP peuvent aussi prendre en charge SSL3 [ssl]. Cela s’ajoute à la sécurité exigée dans le présent document.

8.2	Utilisation d’IPP avec TLS

IPP/1.1 utilise le mécanisme "Mise à niveau avec TLS au sein de HTTP/1.1" de la [RFC2817]. Une demande IPP initiale n’utilise jamais TLS. Le client demande une connexion TLS sécurisée en utilisant l’en-tête HTTP "Upgrade" (mettre à niveau) tandis que le serveur donne son accord dans la réponse HTTP. Le basculement sur TLS survient parce que le serveur accorde la demande du client de mettre à niveau sur TLS, ou parce qu’un serveur demande à passer à TLS dans sa réponse. La communication sécurisée commence avec une réponse de serveur acceptant de basculer sur TLS.

9.	Interopérabilité avec les mises en œuvre IPP/1.0

Il est en dehors du domaine d’application de la présente spécification d’obliger à la conformité aux versions précédentes. IPP/1.1 a cependant été délibérément conçu pour faciliter la prise en charge des versions antérieures. Il vaut la peine de noter que, à l’heure de la rédaction de la présente spécification (1999), nous nous attendons à ce que les mises en œuvre d’imprimantes IPP/1.1 : comprennent toute demande valide dans le format de IPP/1.0, ou 1.1 ; répondent de façon appropriée et que cette réponse contienne la même valeur de paramètre "numéro-de-version" que celle utilisée par le client dans la demande.

Et nous nous attendons à ce que les clients IPP/1.1 comprennent toute réponse valide dans le format de IPP/1.0, ou 1.1.

9.1	Le paramètre "numéro-de-version"

Les règles suivantes concernent le paramètre "numéro-de-version" (voir au paragraphe 3.3) :

1.	Les clients DOIVENT envoyer des demandes contenant un paramètre "numéro-de-version" avec une valeur de '1.1' et DEVRAIENT essayer de fournir des numéros de version de remplacement s’ils reçoivent un retour d’erreur 'erreur-serveur, version-non-acceptée' dans une réponse.
2.	Les objets IPP DOIVENT accepter les demandes qui contiennent un paramètre "numéro-de-version" avec une valeur de '1.1' (ou rejeter la demande pour des raisons autres que 'erreur-serveur, version-non-acceptée').
3.	Il est recommandé que les objets IPP acceptent toute demande avec la principale version '1' (ou rejettent la demande pour des raisons autres que 'erreur-serveur, version-non-acceptée'). Voir le paragraphe "versions" de la [RFC2911].
4.	Dans tous les cas, la sécurité NE DOIT PAS être compromise lorsqu’un client fournit un paramètre "numéro-de-version" inférieur dans une demande. Par exemple, si un objet imprimante conforme à IPP/1.1 accepte des demandes de version '1.0' et qu’il est configuré pour mettre en application l’authentification abrégée, il DOIT faire de même pour une demande en version '1.0'.

9.2	Sécurité et schéma d’URL

Les règles suivantes concernent la sécurité, le paramètre "numéro-de-version", et le schéma d’URL fournis dans les attributs et réponses cibles :
1.	Lorsqu’un client fournit une demande, l’attribut d’opération cible "uri-d’imprimante" ou "uri-de-tâche" DOIT avoir le même schéma que celui indiqué dans une des valeurs de l’attribut d’imprimante "uri-d’imprimante-accepté".
2.	Lorsque le serveur retourne les attributs de description de tâche "uri-de-tâche-d’imprimante" ou "uri-de-tâche", il DEVRAIT retourner le même schéma ('ipp', 'https', 'http', etc.) que celui fourni par le client dans l’attribut d’opération cible "uri-d’imprimante" ou "uri-de-tâche" dans la demande Obtenir-les-attributs-de-tâche ou Obtenir-les-tâches, plutôt que le schéma utilisé lors de la création de la tâche. Cependant, lorsqu’un client demande des attributs de tâche en utilisant les opérations Obtenir-les-attributs-de-tâche ou Obtenir-les-tâches, les tâches et attributs de tâche que retourne le serveur dépendent (1) de la sécurité en vigueur lors de la création de la tâche, (2) de la sécurité en vigueur dans la demande d’interrogation, et (3) de la politique de sécurité en vigueur.
3.	Il est recommandé que si un serveur enregistre un URL-ipp non sécurisé dans un service d’annuaire (voir l’appendice "Schéma générique d’annuaire" de la [RFC2911]), il enregistre alors aussi un URL-http pour l’interopérabilité avec les clients IPP/1.0 (voir la section 9).
4.	Dans tous les cas, la sécurité NE DOIT PAS être compromise lorsqu’un client fournit un schéma d’URL 'http' ou autre non sécurisé dans les attributs d’opération cible "uri-d’imprimante" et "uri-de-tâche " d’une demande.

10.	Références

[dpa]	ISO/IEC 10175 Document Printing Application (DPA) (Application d’impression de document), juin 1996.

[iana]	IANA Registry of Coded Character Sets (Registre IANA des ensembles de caractères codés) : ftp://ftp.isi.edu/in-notes/iana/assignments/caractère-sets.

[IANA-CON]	Narten, T. et H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs" (Lignes directrices pour la rédaction de la section sur les considérations relatives à l’IANA dans les RFC), BCP 26, RFC 2434, octobre 1998.

[ipp-iig]	Hastings, Tom, et al., "Internet Printing Protocol/1.1: Implementer's Guide" (Protocole 1.1 d’impression sur Internet : Guide pour la mise en œuvre), travail en cours.

[RFC822]	Crocker, D., "Standard for the Format of ARPA Internet Text Messages" (Norme pour le format des messages de texte ARPA sur Internet), STD 11, RFC 822, août 1982.

[RFC1123]	Braden, S., "Requirements for Internet Hosts - Application and Support" (Exigences pour les hôtes Internet : application et prise en charge), STD 3, RFC 1123, octobre 1989.

[RFC1179]	McLaughlin, L. III, (editor), "Line Printer Daemon Protocol" (Protocole Daemon d’imprimante en ligne), RFC 1179, août 1990.

[RFC2223]	Postel, J. et J. Reynolds, "Instructions to RFC Authors" (Instructions pour les auteurs de RFC), RFC 2223, octobre 1997.

[RFC1738]	Berners-Lee, T., Masinter, L. et M. McCahill, "Uniform Resource Locators (URL)" (Localiseurs de ressource universels) (RFC 1738, décembre 1994.

[RFC1759]	Smith, R., Wright, F., Hastings, T., Zilles, S. and J. Gyllenskog, "Printer MIB" (MIB d’imprimante), RFC 1759, mars 1995.

[RFC1766]	Alvestrand, H., "Tags for the Identification of Languages" (Etiquettes d’identification des langues), RFC 1766, mars 1995.

[RFC1808]	Fielding, R., "Relative Uniform Resource Locators" (Localiseurs de ressource uniformes relatifs), RFC 1808, juin 1995.

[RFC1903]	Case, J., McCloghrie, K., Rose, M. et S. Waldbusser, "Textual Conventions for Version 2 of the Simple Network Management Protocol (SNMPv2)" (Conventions textuelles pour la version 2 du protocole simple de gestion de réseau), RFC 1903, janvier 1996.

[RFC2046]	Freed, N. et N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types" (Extensions multi-objets de messagerie Internet (MIME) Partie 2 : Types de support), RFC 2046, novembre 1996.

[RFC2048]	Freed, N., Klensin, J. et J. Postel, "Multipurpose Internet Mail Extension (MIME) Part Four: Registration Procedures" (Extensions multi-objets de messagerie Internet (MIME) Partie 4 : Procédures d’enregistrement), BCP 13, RFC 2048, novembre 1996.

[RFC2119]	Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels" (Mots clé à utiliser dans les RFC pour indiquer le niveau d’exigence), BCP 14, RFC 2119, mars 1997.

[RFC2184]	Freed, N. et K. Moore, "MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations" (Extensions MIME de valeurs de paramètre de de mot codé : Ensembles de caractères, langages et continuations), RFC 2184, août 1997.

[RFC2234]	Crocker, D. et P. Overall, "Augmented BNF for Syntax Specifications: ABNF" (BNF augmentée pour les spécifications de syntaxe : ABNF), RFC 2234, novembre 1997.

[RFC2246]	Dierks, T. et C. Allen, "The TLS Protocol" (Protocole TLS), RFC 2246. janvier 1999.

[RFC2396]	Berners-Lee, T., Fielding, R. et L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax" (Identifiants de ressource uniformes (URI) : Syntaxe générique), RFC 2396, août 1998.

[RFC2565]	Herriot, R., Butler, S., Moore, P. and R. Turner, "Internet Printing Protocol/1.0: Encoding and Transport" (Protocole /1.0 d’impression sur Internet : codage et transport), RFC 2565, avril 1999.

[RFC2566]	deBry, R., Hastings, T., Herriot, R., Isaacson, S. and P. Powell, "Internet Printing Protocol/1.0: Model and Semantics" (Protocole /1.0 d’impression sur Internet : modèle et sémantique), RFC 2566, avril 1999.

[RFC2567]	Wright, D., "Design Goals for an Internet Printing Protocol" (Objectifs de conception pour un protocole d’impression sur Internet), RFC2567, avril 1999.

[RFC2568]	Zilles, S., "Rationale for the Structure and Model and Protocol for the Internet Printing Protocol" (Arguments pour la structure, le modèle et le protocole du Protocole d’impression sur Internet), RFC 2568, avril 1999.

[RFC2569]	Herriot, R., Hastings, T., Jacobs, N. et J. Martin, "Mapping between LPD and IPP Protocols" (Transposition entre les protocoles LPD et IPP), RFC 2569, avril 1999.

[RFC2616]	Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P. et T. Berners-Lee, "Hypertext Transfer Protocol - HTTP/1.1" (Protocole de transfert hypertexte – HTTP/1.1), RFC 2616, juin 1999.

[RFC2617]	Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A. et L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication" (Authentification HTTP : authentification d’accès basique et abrégée), RFC 2617, juin 1999.

[RFC2817]	Khare, R. et S. Lawrence, "Upgrading to TLS Within HTTP/1.1" (Mise à niveau en TLS au sein de HTTP/1.1), RFC 2817, May 2000.

[RFC2910]	Herriot, R., Butler, S., Moore, P., Turner, R. et J. Wenn, "Internet Printing Protocol/1.1: Encoding and Transport" (Protocole /1.1 d’impression sur Internet : codage et transport), RFC 2910, septembre 2000.

[RFC2911]	Hastings, T., Herriot, R., deBry, R., Isaacson, S. and P. Powell, "Internet Printing Protocol/1.1: Model and Semantics" (Protocole /1.1 d’impression sur Internet : modèle et sémantique), RFC 2911, septembre 2000.

[SSL]	Netscape, The SSL Protocol, Version 3, (Text version 3.02), November 1996.

11.	Adresse des auteurs

Robert Herriot, Editor	Sylvan Butler	Paul Moore	
Xerox Corporation	Hewlett-Packard	Peerless Systems Networking	
3400 Hillview Ave., Bldg #1	11311 Chinden Blvd.	10900 NE 8th St #900	
Palo Alto, CA 94304	Boise, ID 83714	Bellevue, WA 98004	
Tél : 650-813-7696	Tél : 208-396-6000	Tél : 425-462-5852	
Fax : 650-813-6860	Fax : 208-396-3457		
mél: robert.herriot@pahv.xerox.com	Mél : sbutler@boi.hp.com	Mél : pmoore@peerless.com	

John Wenn	Randy Turner	
Xerox Corporation	2Wire, Inc.	
737 Hawaii St	694 Tasman Dr.	
El Segundo, CA  90245	Milpitas, CA 95035	
Tél : 310-333-5764	Tél : 408-546-1273	
Fax : 310-333-5514		
Mél : jwenn@cp10.es.xerox.com		

Page Web d’IPP : http://www.pwg.org/ipp/
Liste de diffusion IPP : ipp@pwg.org

Pour s’abonner à la liste de diffusion ipp, envoyer le courriel suivant :
1) s’adresser à majordomo@pwg.org
2) laisser la ligne «subject» en blanc
3) mettre les deux lignes suivantes dans le corps du message :
subscribe ipp
end

12.	Autres participants :

Chuck Adams – Tektronix	Shivaun Albright - HP	
Stefan Andersson – Axis	Jeff Barnett - IBM	
Ron Bergman - Hitachi Koki Imaging	Dennis Carney - IBM Systems	
Keith Carter – IBM	Angelo Caruso - Xerox	
Rajesh Chawla - TR Computing	Nancy Chen - Okidata Solutions	
Josh Cohen – Microsoft	Jeff Copeland - QMS	
Andy Davidson – Tektronix	Roger deBry - IBM	
Maulik Desai – Auco	Mabry Dozier - QMS	
Lee Farrell - Canon Information	Satoshi Fujitami - Ricoh Systems	
Steve Gebert – IBM	Sue Gleeson - Digital	
Charles Gordon – Osicom	Brian Grimshaw - Apple	
Jerry Hadsell – IBM	Richard Hart - Digital	
Tom Hastings – Xerox	Henrik Holst - I-données	
Stephen Holmstead	Zhi-Hong Huang - Zenographics	
Scott Isaacson – Novell	Babek Jahromi - Microsoft	
Swen Johnson – Xerox	David Kellerman - Northlake  Software	
Robert Kline – TrueSpectra	Charles Kong - Panasonic	
Carl Kugler – IBM	Dave Kuntz - Hewlett-Packard	
Takami Kurono – Brother	Rick Landau - Digital	
Scott Lawrence - Agranot Systems	Greg LeClair - Epson	
Dwight Lewis – Lexmark	Harry Lewis - IBM	
Tony Liao - Vivid Image	Roy Lomicka - Digital	
Pete Loya – HP	Ray Lutz - Cognisys	
Mike MacKay - Novell, Inc	David Manchala - Xerox	
Carl-Uno Manros – Xerox	Jay Martin - Underscore	
Stan McConnell – Xerox	Larry Masinter - Xerox	
Sandra Matts - Hewlett Packard	Peter Michalek - Shinesoft	
Ira McDonald - High North Inc.	Mike Moldovan - G3 Nova	
Tetsuya Morita – Ricoh	Yuichi Niwa - Ricoh	
Pat Nogay – IBM	Ron Norton - Printronics	
Hugo Parra, Novell	Bob Pentecost - Hewlett-Packard	
Patrick Powell – Astart	Jeff Rackowitz - Intermec Technologies	
Eric Random – Peerless	Rob Rhoads - Intel	
Xavier Riley – Xerox	Gary Roberts - Ricoh	
David Roach – Unisys	Stuart Rowley - Kyocera	
Yuji Sasaki - Japan Computer	Richard Schneider - Epson Industry	
Kris Schoff – HP	Katsuaki Sekiguchi - Canon Information Systems	
Bob Setterbo – Adobe	Gail Songer - Peerless	
Hideki Tanaka - Cannon Information	Devon Taylor - Novell, Inc. Systems	
Mike Timperman – Lexmark	Atsushi Uchino - Epson	
Shigeru Ueda – Canon	Bob Von Andel - Allegro Software	
William Wagner - NetSilicon/DPI	Jim Walker - DAZEL	
Chris Wellens - Interworking Labs	Trevor Wells - Hewlett Packard	
Craig Whittle - Sharp Labs	Rob Whittle - Novell, Inc.	
Jasper Wong - Xionics 	Don Wright - Lexmark	
Michael Wu - Heidelberg Digital	Rick Yardumian - Xerox	
Michael Yeung - Canon Information   	Lloyd Young - Lexmark Systems	
Atsushi Yuki – Kyocera	Peter Zehler - Xerox	
William Zhang - Canon Information	Frank Zhao - Panasonic Systems	
Steve Zilles – Adobe	Rob Zirnstein - Canon Information Systems	

13.	Appendice A : Exemples de protocole
13.1	Demande Tâche d’impression
Ci-après figure un exemple de demande Tâche d’impression avec le nom de tâche, les copies et les côtés spécifiés. L’attribut "ipp-attribute-fidelity" est réglé à 'vrai' de sorte que la demande d’impression va échouer si les attributs "copies" ou "côtés" ne sont pas pris en charge ou si leurs valeurs ne sont pas acceptées.

Octets 	Valeur symbolique	Champ du protocole	
0x0101	1.1	numéro-de-version	
0x0002	tâche-d’impression	id-d’opération	
0x00000001	1	id-de-demande	
0x01	commence attributs-d’opération	étiquette-d’attributs-d’opération	
0x47	type de charset	étiquette-de-valeur	
0x0012	longueur de nom		
charset-des-attributs	charset-des-attributs	nom	
0x0008		longueur-de-valeur	
us-ascii	US-ASCII	valeur	
0x48	type-de-langage-naturel	étiquette-de-valeur	
0x001B		longueur-de-nom	
attributes-natural-language	attributs-de-langage-naturel	nom	
0x0005		longueur-de-valeur	
en-us	en-US	valeur	
0x45	type-d’uri	étiquette-de-valeur	
0x000B		longueur-de-nom	
uri-d’imprimante	uri-d’imprimante	nom	
0x0015		longueur-de-valeur	
ipp://forest/pinetree	imprimante pinetree	valeur	
0x42	type de nomSansLangage	étiquette-de-valeur	
0x0008		longueur-de-nom	
nom de tâche	nom-de-tâche	nom	
0x0006		longueur-de-valeur	
foobar	Foobar	valeur	
0x22 	type booléen	étiquette-de-valeur	
0x0016		longueur-de-nom	
ipp-attribute-fidelity	fidélité-d’attribut-ipp	nom	
0x0001		longueur-de-valeur	
0x01	vrai	valeur	
0x02	commence attributs-de-tâche	étiquette-d’attributs-de-tâche	
0x21	type d’entier	étiquette-de-valeur	
0x0006		longueur-de-nom	
copies	copies	nom	
0x0004		longueur-de-valeur	
0x00000014	20	valeur	
0x44	type de mot-clé	étiquette-de-valeur	
0x0005		longueur-de-nom	
sides	côtés	nom	
0x0013		longueur-de-valeur	
two-sided-long-edge	bordure-de-deux-côtés	valeur	
0x03	fin-des-attributs	étiquette-de-fin-des-attributs	
%!PS...	<PostScript>	données	

13.2	Réponse (réussie) à Tâche-d’impression
Ci-après figure un exemple de réponse de réussite de Tâche d’impression à la précédente demande Tâche-d’impression. L’imprimante accepte les attributs "copies" et "côtés"avec les valeurs fournies. Le code d’état retourné est 'réussite-ok'.

Octets	Valeur symbolique	Champ du protocole	
0x0101	1.1	numéro-de-version	
0x0000	réussite-ok	code-d’état	
0x00000001	1	id-de-demande	
0x01	commence attributs-d’opération	étiquette-d’attributs-d’opération	
0x47	type de charset	étiquette-de-valeur	
0x0012		longueur-de-nom	
attributes-charset	charset-des-attributs	nom	
0x0008		longueur-de-valeur	
us-ascii	US-ASCII	valeur	
0x48	type de langage-naturel	étiquette-de-valeur	
0x001B		longueur-de-nom	
attributes-natural-language	attributs-de-langage-naturel	nom	
0x0005		longueur-de-valeur	
en-us	en-US	valeur	
0x41	type de texteSansLangage	étiquette-de-valeur	
0x000E		longueur-de-nom	
status-message	message-d’état	nom	
0x000D		longueur-de-valeur	
successful-ok	réussite-ok	valeur	
0x02	commence attributs-de-tâche	étiquette-d’attributs-de-tâche	
0x21	entier	étiquette-de-valeur	
0x0006		longueur-de-nom	
job-id	id-de-tâche	nom	
0x0004		longueur-de-valeur	
147	147	valeur	
0x45	type d’uri	étiquette-de-valeur	
0x0007		longueur de nom	
job-uri	uri de tâche	nom	
0x0019		longueur-de-valeur	
ipp://forest/pinetree/123	tâche 123 sur pinetree	valeur	
0x23	type d’énumération	étiquette-de-valeur	
0x0009		longueur-de-nom	
job-state	état-de-tâche	nom	
0x0004		longueur-de-valeur	
0x0003	en instance	valeur	
0x03	fin-des-attributs	étiquette-de-fin-des-attributs	

13.3	Réponse (échec) à Tâche-d’impression
Ci-après figure un exemple d’échec de réponse à Tâche-d’impression à la précédente demande Tâche-d’impression. Elle échoue parce que, dans ce cas, l’imprimante ne prend pas en charge l’attribut "côtés" et parce que la valeur '20' pour l’attribut "copies" n’est pas acceptée. Donc, aucune tâche n’est créée, et aucun attribut d’opération "id-de-tâche" ni "uri-de-tâche" n’est retourné. Le code d’erreur retourné est 'erreur-client-attributs-ou-valeurs-non-acceptés' (0x040B).

0x0101	1.1	numéro-de-version	
0x040B	erreur-client-attributs-ou-valeurs-non-acceptés	code-d’état	
0x00000001	1	id-de-demande	
0x01	commence attributs-d’opération	étiquette-d’attributs-d’opération	
0x47	type de charset	étiquette-de-valeur	
0x0012		longueur-de-nom	
attributes-charset	charset des attributs	nom	
0x0008		longueur-de-valeur	
us-ascii	US-ASCII	valeur	
0x48	type de langage-naturel	étiquette-de-valeur	
0x001B		longueur-de-nom	
attributes-natural-language	attributs-de-langage-naturel	nom	
0x0005		longueur-de-valeur	
en-us	en-US	valeur	
0x41	type de texteSansLangage	étiquette-de-valeur	
0x000E		longueur-de-nom	
status-message	message-d’état	nom	
0x002F		longueur-de-valeur	
client-error-attributes-or-valeurs-not-supported	erreur-client-attributs-ou-valeurs-non-acceptés	valeur	
0x05	commence attributs-non-acceptés	étiquette-d’attributs-non-acceptés	
0x21	type d'entier	étiquette-de-valeur	
0x0006		longueur-de-nom	
copies	copies	nom	
0x0004		longueur-de-valeur	
0x00000014	20	valeur	
0x10	non accepté (type)	étiquette-de-valeur	
0x0005		longueur-de-nom	
sides	côtés	nom	
0x0000		longueur-de-valeur	
0x03	fin-des-attributs	étiquette-de-fin-d’attributs	

13.4	Réponse à Tâche-d’impression (réussite avec attributs ignorés)
Ci-après figure un exemple de réponse réussie de Tâche-d’impression à une demande Tâche-d’impression comme la précédente demande Tâche-d’impression, excepté que la valeur de 'fidélité-d’attributs-ipp' est faux. La demande d’impression réussit, même si, dans ce cas, l’imprimante n’accepte ni l’attribut "côtés"ni la valeur '20' pour l’attribut "copies". Une tâche est donc créée, et des attributs d’opération "id-de-tâche" et "uri-de-tâche" sont tous deux retournés. Les attributs non pris en charge sont aussi retournés dans un groupe d’attributs non acceptés. Le code d’erreur retourné est 'réussite-ok-attributs-ignorés-ou-substitués' (0x0001).

Octets	Valeur symbolique	Champ du protocole	
0x0101	1.1	numéro-de-version	
0x0001	réussite-ok-attributs-ignorés-ou-substitués	code-d’état	
0x00000001	1	id-de-demande	
0x01	commence attributs d’opération	étiquette-d’attributs-d’opération	
0x47	type de charset	étiquette-de-valeur	
0x0012		longueur-de-nom	
attributes-charset	charset-des-attributs	nom	
0x0008		longueur-de-valeur	
us-ascii	US-ASCII	valeur	
0x48	type de langage-naturel	étiquette-de-valeur	
0x001B		longueur-de-nom	
attributes-natural-language	langage-naturel-des-attributs	nom	
0x0005		longueur-de-valeur	
en-us	en-US	valeur	
0x41	type de texteSansLangage	étiquette-de- valeur	
0x000E		longueur-de-nom	
status-message	message-d’état	nom	
0x002F		longueur-de-valeur	
successful-ok-ignored-or-substituted-attributes	réussite-ok-attributs-ignorés-ou-substitués	valeur	
0x05	commence attributs-non-accceptés	étiquette-d’attributs-non-acceptés	
0x21	type d'entier 	étiquette-de-valeur	
0x0006		longueur-de-nom	
copies	copies	nom	
0x0004		longueur-de-valeur	
0x00000014	20	valeur	
0x10	non accepté  (type)	étiquette-de-valeur	
0x0005		longueur-de-nom	
sides	Côtés	nom	
0x0000		longueur-de-valeur	
0x02	commence attributs-de-tâche	étiquette-d’attributs-de-tâche	
0x21	entier	étiquette-de-valeur	
0x0006		longueur-de-nom	
job-id	id-de-tâche	nom	
0x0004		longueur-de-valeur	
147	147	valeur	
0x45	type d’uri	étiquette-de-valeur	
0x0007		longueur-de-nom	
job-uri	uri-de-tâche	nom	
0x0019		longueur-de-valeur	
ipp://forest/pinetree/123	tâche 123 sur pinetree	valeur	
0x23	type d'énumération	étiquette-de-valeur	
0x0009		longueur-de-nom	
job-state	état-de-tâche	nom	
0x0004		longueur-de-valeur	
0x0003	en instance	valeur	
0x03	fin-des-attributs	étiquette-de-fin-des-attributs	

13.5	Demande d’URI-d’imprimante
Ci-après figure un exemple de demande URI-d’imprimante avec des paramètres copies et nom-de-tâche :

Octets	Valeur symbolique	Champ du protocole	
0x0101	1.1	numéro-de-version	
0x0003	URI-d’imprimante	id-d’opération	
0x00000001	1	id-de-demande	
0x01	commence attributs-d’opération	étiquette-d’attributs-d’opération	
0x47	type de charset	étiquette-de-valeur	
0x0012		longueur-de-nom	
attributes-charset	charset-des-attributs	nom	
0x0008		longueur-de-valeur	
us-ascii	US-ASCII	valeur	
0x48	type de langage-naturel	étiquette-de-valeur	
0x001B		longueur-de-nom	
attributes-natural-language	langage-naturel-des-attributs	nom	
0x0005		longueur-de-valeur	
en-us	en-US	valeur	
0x45	type d’uri	étiquette-de-valeur	
0x000B		longueur-de-nom	
printer-uri	uri d’imprimante	nom	
0x0015		longueur-de-valeur	
ipp://forest/pinetree	imprimante pinetree	valeur	
0x45	type d’uri	étiquette-de-valeur	
0x000C		longueur-de-nom	
document-uri	uri de document	nom	
0x0011		longueur-de-valeur	
ftp://foo.com/foo	ftp://foo.com/foo	valeur	
0x42	type de nomSansLangage	étiquette-de-valeur	
0x0008 		longueur-de-nom	
job-name	nom-de-tâche	nom	
0x0006		longueur-de valeur	
foobar	Foobar	valeur	
0x02	commence attributs-de-tâche	étiquette-d’attributs-de-tâche	
0x21	type d’entier	étiquette-de-valeur	
0x0006		longueur-de-nom	
copies	copies	nom	
0x0004		longueur-de-valeur	
0x00000001	1	valeur	
0x03	fin-des-attributs	étiquette-de-fin-des-attributs	

13.6	Demande Création-de-tâche
Ci-après figure un exemple de demande Création-de-tâche sans paramètre ni attribut :

Octets	Valeur symbolique	Champ du protocole	
0x0101	1.1	numéro-de-version	
0x0005	création-de-tâche	id-d’opération	
0x00000001	1	id-de-demande	
0x01	commence attributs d’opération	étiquette-d’attributs-d’opération	
0x47	type de charset	étiquette-de-valeur	
0x0012		longueur-de-nom	
attributes-charset	charset-des-attributs	nom	
0x0008		longueur-de-valeur	
us-ascii	US-ASCII	valeur	
0x48	type de langage-naturel	étiquette-de-valeur	
0x001B		longueur-de-nom	
attributes-natural-language	langage-naturel-des-attributs	nom	
0x0005		longueur-de-valeur	
en-us	en-US	valeur	
0x45	type d’uri	étiquette-de-valeur	
0x000B		longueur-de-nom	
printer-uri	uri-d’imprimante	nom	
0x0015		longueur-de-valeur	
ipp://forest/pinetree	imprimante pinetree	valeur	
0x03	fin-des-attributs	étiquette-de-fin-des-attributs	

13.7	Demande Obtenir-les-tâches
Voir ci-après un exemple de demande Obtenir-les-tâches avec des paramètres mais pas d’attribut :

Octets	Valeur symbolique	Champ du protocole	
0x0101	1.1	numéro-de-version	
0x000A	obtenir-les-tâches	id-d’opération	
0x00000123	0x123	id-de-demande	
0x01	commence attributs-d’opération	étiquette-d’attributs-d’opération	
0x47	type de charset	étiquette-de-valeur	
0x0012		longueur-de-nom	
attributes-charset	charset-des-attributs	nom	
0x0008		longueur-de-valeur	
us-ascii	US-ASCII	valeur	
0x48	type de langage-naturel	étiquette-de-valeur	
0x001B		longueur-de-nom	
attributes-natural-language	langage-naturel-des-attributs	nom	
0x0005	 	longueur-de-valeur	
en-us	en-US	valeur	
0x45	type d’uri	étiquette-de-valeur	
0x000B		longueur-de-nom	
printer-uri	uri d’imprimante	nom	
0x0015		longueur-de-valeur	
ipp://forest/pinetree	imprimante pinetree	valeur	
0x21	type d’entier	étiquette-de-valeur	
0x0005		longueur-de-nom	
limit	limite	nom	
0x0004		longueur-de-valeur	
0x00000032	50	valeur	
0x44	type de mot-clé	étiquette-de-valeur	
0x0014		longueur-de-nom	
requested-attributes	attributs-demandés	nom	
0x0006		longueur-de-valeur	
job-id	id-de-tâche	valeur	
0x44	type de mot-clé	étiquette-de-valeur	
0x0000	valeur supplémentaire	longueur-de- nom	
0x0008		longueur-de-valeur	
job-name	nom-de-tâche	valeur	
0x44	type de mot-clé	étiquette-de-valeur	
0x0000	valeur supplémentaire	longueur-de-nom	
0x000F		longueur-de-valeur	
document-format	format-de-document	valeur	
0x03	fin-des-attributs	étiquette-de-fin-des-attributs	

13.8	Réponse à Obtenir-les-tâches
Ce qui suit est une réponse à Obtenir-les-tâches à une précédente demande avec trois tâches. L’imprimante ne retourne pas d’informations sur la seconde tâche (pour des raisons de sécurité) :

Octets	Valeur symbolique	Champ du protocole	
0x0101	1.1	numéro-de-version	
0x0000	réussite-ok	code-d’état	
0x00000123	0x123	id-de-demande (en retour)	
0x01	commence attributs-d’opération	étiquette-d’attributs-d’opération	
0x47	type de charset	étiquette-de-valeur	
0x0012		longueur-de-nom	
attributes-charset	charset-des-attributs	nom	
0x000A		longueur-de-valeur	
ISO-8859-1	ISO-8859-1	valeur	
0x48	type-de-langage-naturel	étiquette-de-valeur	
0x001B		longueur-de-nom	
attributes-natural-language	langage-naturel-des-attributs	nom	
0x0005		longueur-de-valeur	
en-us	en-US	valeur	
0x41	type de texteSansLangage	étiquette-de-valeur	
0x000E		longueur-de-nom	
status-message	message-d’état	nom	
0x000D		longueur-de-valeur	
successful-ok	réussite-ok	valeur	
0x02	commence attributs de tâche (1er objet)	étiquette-d’attributs-de- tâche	
0x21	type d’entier	étiquette-de- valeur	
0x0006		longueur-de-nom	
job-id	id de tâche	nom	
0x0004		longueur-de-valeur	
147	147	valeur	
0x36	nomAvecLangage	étiquette-de-valeur	
0x0008		longueur-de-nom	
nom de tâche	nom de tâche	nom	
0x000C		longueur-de-valeur	
0x0005		longueur-de-sous-valeur	
fr-ca	fr-CA	valeur	
0x0003		longueur-de-sous-valeur	
fou	fou	nom	
0x02	commence attributs-de-tâche (2ème objet)	étiquette-d’attributs-de-tâche	
0x02	commence attributs de tâche (3ème objet)	étiquette-d’attributs-de-tâche	
0x21	type d’entier	étiquette-de-valeur	
0x0006		longueur-de-nom	
job-id	id-de-tâche	nom	
0x0004		longueur-de-valeur	
148	149	valeur	
0x36	nomAvecLangage	étiquette-de-valeur	
0x0008		longueur de nom	
nom de tâche	nom-de-tâche	nom	
0x0012		longueur-de-valeur	
0x0005		longueur-de-sous-valeur	
de-CH	de-CH	valeur	
0x0009		longueur-de-sous-valeur	
isch guet	isch guet	nom	
0x03	fin-des-attributs	étiquette-de-fin-des-attributs	

14.	Appendice B : Enregistrement des informations de type de support MIME pour "application/ipp"

Le présent appendice contient les informations dont a besoin l’IANA pour enregistrer un type de support MIME. Les informations selon cette section seront transmises à l’IANA pour enregistrer l’application/ipp dont le contenu est défini à la section 3 "Codage de la couche fonctionnement" du présent document:

Nom de type MIME : application

Nom de sous-type MIME : ipp

Un type de contenu de "application/ipp" indique un corps de message (demande ou réponse) du Protocole d’impression sur Internet. Il y a actuellement une version: IPP/1.1, dont la syntaxe est décrit en section 3 "Codage de la couche fonctionnement" de la [RFC2910], et dont la sémantique est décrite dans la [RFC2911].

Paramètres exigés : aucun

Paramètres facultatifs : aucun

Considérations sur le codage : Les demandes/réponses du protocole IPP/1.1 PEUVENT contenir des lignes longues et contiennent TOUJOURS des données binaires (par exemple les longueurs de valeur d’attributs).

Considérations de sécurité : Les demandes/réponses du protocole IPP/1.1 n’introduisent aucun risque pour la sécurité qui ne soit déjà inhérent aux protocoles de transport sous-jacents. Les règles d’interopérabilité des mélanges de versions de protocole de la [RFC2911] aussi bien que les règles de codage du protocole dans la [RFC2910] sont complètes et non ambiguës.

Considérations d’interopérabilité : Les demandes (générées par les clients) et les réponses (générées par les serveurs) IPP/1.1 DOIVENT satisfaire à toutes les exigences de conformité imposées par les spécifications normatives [RFC2911] et [RFC2910]. Les règles de codage du protocole spécifiées dans la [RFC2910] sont complètes, de sorte que l’interopérabilité entre les mises en œuvre conformes est garantie (bien que la prise en charge de caractéristiques facultatives spécifiques ne soit pas assurée). Toutes les valeurs d’attribut IPP/1.1 de "charset" et "langage-naturel" qui sont une CHAINE-LOCALISEE sont explicites au sein des demandes/réponses du protocole IPP (sans recours à des informations externes dans HTTP, SMTP, ou autres en-têtes de transport de messages).

Spécifications publiées :
[RFC2910]	Herriot, R., Butler, S., Moore, P., Turner, R. et J. Wenn, "Internet Printing Protocol/1.1: Encoding and Transport" (Protocole /1.1 d’impression sur Internet :codage et transport), RFC 2910, septembre 2000.

[RFC2911]	Hastings, T., Herriot, R., deBry, R., Isaacson, S. and P. Powell, "Internet Printing Protocol/1.1: Model and Semantics" (Protocole /1.1 d’impression sur Internet : modèle et sémantique), RFC 2911, septembre 2000.

Applications qui utilisent ce type de support :
Les clients d’impression et serveurs d’impression du protocole d’impression sur Internet (IPP), qui communiquent en utilisant HTTP/1.1 (voir la [RFC2910]), SMTP/ESMTP, FTP, ou un autre protocole de transport. Les messages de type "application/ipp" s’auto-suffisent et sont indépendants du transport, y compris le contexte de "charset" et "langage-naturel" pour toute valeur CHAINE-LOCALISÉE.

Adresse personnelle & de messagerie à contacter pour toute précision :
Tom Hastings	Robert Herriot	
Xerox Corporation	Xerox Corporation	
737 Hawaii St. ESAE-231	3400 Hillview Ave., Bldg #1	
El Segundo, CA	Palo Alto, CA 94304	
Phone: 310-333-6413	Phone: 650-813-7696	
Fax: 310-333-5514	Fax: 650-813-6860	
EMail: hastings@cp10.es.xerox.com	EMail: robert.herriot@pahv.xerox.com	

Utilisation prévue : COMMUNE

15.	Appendice C : Changements par rapport à IPP/1.0

IPP/1.1 est identique à IPP/1.0 [RFC2565] avec les modifications suivantes :

1.	Les valeurs d’attributs qui identifient un objet imprimante ou tâche utilisent un nouveau schéma 'ipp'. Les schémas 'http' et 'https' ne sont pris en charge que pour la compatibilité amont. Voir la section 5.
2.	Les clients DOIVENT prendre en charge l’authentification abrégée, les imprimantes IPP DEVRAIENT prendre en charge l’authentification abrégée. Voir au paragraphe 8.1.1
3.	TLS est recommandé pour la sécurité du canal. De plus, SSL3 peut être pris en charge pour la compatibilité amont. Voir au paragraphe 8.1.2
4.	Il est recommandé que les objets IPP/1.1 acceptent toute demande avec un numéro de version principal de '1'. Voir au paragraphe 9.1.
5.	Les objets IPP DEVRAIENT retourner le schéma d’URL demandé pour les attributs de tâche "uri-de-tâche-d’imprimante" et "uri-de-tâche", plutôt que le schéma d’URL utilisé pour créer la tâche. Voir au paragraphe 9.2.
6.	Les sections sur l’IANA et sur l’internationalisation ont été ajoutées. Les termes "utilisation privée" et "expérimental" ont été remplacés par "extension du fabricant". Les allocations réservées pour les étiquettes de groupe d’attribut, les étiquettes de syntaxe d’attribut, et les valeurs d’attribut hors bande ont été précisées en ce qui concerne celles qui sont réservées pour les futurs documents de normalisation de l’IETF et celles qui sont réservées pour les extensions de fabricants. Les deux sortes d’extensions utilisent les procédures d’enregistrement de type2 comme défini dans la [RFC2911].
7.	Il est précisé que les définitions de valeurs futures "hors bande" peuvent utiliser le champ valeur si des informations supplémentaires sont nécessaires.

Déclaration de copyright
Copyright (C) The Internet Society (2000). Tous droits réservés.

Le présent document est soumis aux droits, licences et restrictions contenus dans le BCP 78, et à www.rfc-editor.org, et sauf pour ce qui est mentionné ci-après, les auteurs conservent tous leurs droits.

Le présent document et les informations y contenues sont fournies sur une base "EN L’ÉTAT" et LE CONTRIBUTEUR, L’ORGANISATION QU’IL OU ELLE REPRÉSENTE OU QUI LE/LA FINANCE (S’IL EN EST), LA INTERNET SOCIETY ET LA INTERNET ENGINEERING TASK FORCE DÉCLINENT TOUTES GARANTIES, EXPRIMÉES OU IMPLICITES, Y COMPRIS MAIS NON LIMITÉES À TOUTE GARANTIE QUE L’UTILISATION DES INFORMATIONS CI-ENCLOSES NE VIOLENT AUCUN DROIT OU AUCUNE GARANTIE IMPLICITE DE COMMERCIALISATION OU D’APTITUDE À UN OBJET PARTICULIER.
Propriété intellectuelle
L’IETF ne prend pas position sur la validité et la portée de tout droit de propriété intellectuelle ou autres droits qui pourrait être revendiqués au titre de la mise en œuvre ou l’utilisation de la technologie décrite dans le présent document ou sur la mesure dans laquelle toute licence sur de tels droits pourrait être ou n’être pas disponible ; pas plus qu’elle ne prétend avoir accompli aucun effort pour identifier de tels droits. Les informations sur les procédures de l’ISOC au sujet des droits dans les documents de l’ISOC figurent dans les BCP 78 et BCP 79.
Des copies des dépôts d’IPR faites au secrétariat de l’IETF et toutes assurances de disponibilité de licences, ou le résultat de tentatives faites pour obtenir une licence ou permission générale d’utilisation de tels droits de propriété par ceux qui mettent en œuvre ou utilisent la présente spécification peuvent être obtenues sur répertoire en ligne des IPR de l’IETF à http://www.ietf.org/ipr.
L’IETF invite toute partie intéressée à porter son attention sur tous copyrights, licences ou applications de licence, ou autres droits de propriété qui pourraient couvrir les technologies qui peuvent être nécessaires pour mettre en œuvre la présente norme. Prière d’adresser les informations à l’IETF à ietf- ipr@ietf.org.
Remerciement
Le financement de la fonction d’édition des RFC est actuellement fourni par Internet Society.