Aller au contenu principal

1. Introduction

Le protocole de transfert hypertexte (Hypertext Transfer Protocol, HTTP) est un protocole requête/réponse, sans état, de niveau application, qui utilise une sémantique extensible et des charges utiles de message auto-descriptives pour interagir de manière souple avec les systèmes d'information hypertexte en réseau. Ce document est le premier d'une série de documents qui constituent collectivement la spécification HTTP/1.1 :

  1. « Syntaxe et routage des messages » (ce document)

  2. « Sémantique et contenu » [RFC7231]

  3. « Requêtes conditionnelles » [RFC7232]

  4. « Requêtes de plage » [RFC7233]

  5. « Mise en cache » [RFC7234]

  6. « Authentification » [RFC7235]

Cette spécification HTTP/1.1 rend obsolètes la RFC 2616 et la RFC 2145 (sur le versionnage de HTTP). Cette spécification met également à jour l'utilisation de CONNECT pour établir un tunnel, précédemment définie dans la RFC 2817, et définit le schéma d'URI « https » qui était décrit de manière informelle dans la RFC 2818.

HTTP est un protocole d'interface générique pour les systèmes d'information. Il est conçu pour masquer les détails de la façon dont un service est implémenté, en présentant aux clients une interface uniforme qui est indépendante des types de ressources fournies. De même, les serveurs n'ont pas besoin de connaître la finalité de chaque client : une requête HTTP peut être considérée isolément plutôt que d'être associée à un type de client particulier ou à une séquence prédéterminée d'étapes applicatives. Le résultat est un protocole qui peut être utilisé efficacement dans des contextes très variés et dont les implémentations peuvent évoluer indépendamment au fil du temps.

HTTP est également conçu pour être utilisé comme protocole d'intermédiation afin de traduire des communications depuis et vers des systèmes d'information non HTTP. Les proxies et les passerelles HTTP peuvent fournir l'accès à des services d'information alternatifs en traduisant leurs protocoles divers en un format hypertexte que les clients peuvent visualiser et manipuler de la même manière que des services HTTP.

Une conséquence de cette souplesse est que le protocole ne peut pas être défini en fonction de ce qui se produit derrière l'interface. Nous sommes au contraire limités à définir la syntaxe de la communication, l'intention de la communication reçue, et le comportement attendu des destinataires. Si la communication est considérée isolément, les actions réussies devraient se refléter dans des changements correspondants de l'interface observable fournie par les serveurs. Cependant, comme plusieurs clients peuvent agir en parallèle et parfois à contre-courant les uns des autres, nous ne pouvons pas exiger que de tels changements soient observables au-delà de la portée d'une seule réponse.

Ce document décrit les éléments d'architecture qui sont utilisés ou mentionnés dans HTTP, définit les schémas d'URI « http » et « https », décrit le fonctionnement général du réseau et la gestion des connexions, et définit les exigences de cadrage et de transfert des messages HTTP. Notre objectif est de définir tous les mécanismes nécessaires au traitement des messages HTTP qui sont indépendants de la sémantique des messages, définissant ainsi l'ensemble complet des exigences pour les analyseurs de messages et pour les intermédiaires qui transfèrent les messages.

1.1. Notation des exigences​

Les mots-clés « MUST », « MUST NOT », « REQUIRED », « SHALL », « SHALL NOT », « SHOULD », « SHOULD NOT », « RECOMMENDED », « MAY » et « OPTIONAL » de ce document doivent être interprétés comme décrit dans [RFC2119].

Les critères de conformité et les considérations relatives à la gestion des erreurs sont définis à la Section 2.5.

1.2. Notation syntaxique​

Cette spécification utilise la notation Augmented Backus-Naur Form (ABNF) de [RFC5234] avec une extension de liste, définie à la Section 7, qui permet de définir de manière compacte des listes séparées par des virgules à l'aide de l'opérateur « # » (de façon analogue à l'opérateur « * », qui indique une répétition). Appendix B présente la grammaire collectée, avec tous les opérateurs de liste développés en notation ABNF standard.

Les règles de base suivantes sont incluses par référence, telles que définies dans [RFC5234], Appendix B.1 : ALPHA (lettres), CR (retour chariot), CRLF (CR LF), CTL (contrôles), DIGIT (décimal 0-9), DQUOTE (guillemet double), HEXDIG (hexadécimal 0-9/A-F/a-f), HTAB (tabulation horizontale), LF (saut de ligne), OCTET (toute séquence de 8 bits de données), SP (espace) et VCHAR (tout caractère visible de [USASCII]).

Par convention, les noms de règles ABNF préfixés par « obs- » désignent des règles de grammaire « obsolètes » qui apparaissent pour des raisons historiques.