Protocole HTTP




BoTTom

Protocole HTTP (HyperText Transfer Protocol,):

Le protocole HTTP, est un protocole de communication client-serveur en mode déconnecté , développé pour le World Wide Web.

Il est le protocole utilisé par les serveurs WEB, par les navigateurs pour dialoguer avec les serveurs web, les ressources étant identifiées par des URI.

URI, de l'anglais Uniform Resource Identifier, soit littéralement identifiant uniforme de ressource, est une courte chaîne de caractères identifiant une ressource sur un réseau .

RFC 3986 section 2.2 Reserved Characters (January 2005)
! * ' ( ) ; : @ & = + $ , / ? # [ ]

et doivent être remplacés par % puis le code ASCII (%20 pour l'espace, %2F pour le /, etc.)


HTTP a été inventé par Tim Berners-Lee avec les adresses Web et le langage HTML .

À cette époque, le FTP était déjà disponible pour transférer des fichiers, mais il ne supportait pas la notion de format de données telle qu'introduite par Multipurpose Internet Mail Extensions (MIME).

La première version de HTTP (0.9) était très élémentaire, mais prévoyait déjà le support d'en-têtes MIME pour décrire les données transmises.

   la version actuelle est la 1.1 (Voir la rfc
)


La liaison entre le client et le serveur n'est pas toujours directe, il peut exister des machines intermédiaires servant de relais :

Un serveur HTTP utilise par défaut le port 80 (443 pour HTTPS)

Au delà du serveur HTTP lui même, qui distribue des fichiers (souvent des pages html et des images), on peut ajouter du code de facon à produire des pages dynamiques

 

Exemple de dialogue HTTP :

Le client se connecte, puis utilise une méthode (comme une commande FTP) :

Une requête HTTP présente le format suivant :

     Ligne de commande (Commande, URL, Version de protocole)
En-tête de requête
[Ligne vide]
Corps de la requête

Les réponses HTTP présentent le format suivant :

     Ligne de statut (Version, Code-réponse, Texte-réponse) 
En-tête de réponse
[Ligne vide]
Corps de réponse

Voici un exemple de dialogue entre un client et le serveur WEB www.volubis.fr

telnet www.volubis.fr 80
Trying 192.168.67.200...
Connected to www.volubis.fr.
Escape character is '^]'.

GET /index.html HTTP/1.1
Host: www.volubis.fr

HTTP/1.1 200 OK
Date: Tue, 03 Jan 2006 08:04:14 GMT
Server: Apache/2.0.52
Last-Modified: Fri, 16 Dec 2005 15:33:13 GMT
ETag: "17c3-e1c-eb594040"
Accept-Ranges: bytes
Content-Length: 3612
Connection: close
Content-Type: text/html; charset=ISO-8859-1

<html>
<head>
  <title><title>mon titre</title>
</head>
<body>
  ma premiere page
</body>
</html>

Les entêtes

Elles sont toujours présentes sous la forme :

Nom: valeur

En voici quelques-unes : (voyez la liste complète)

Quelques types MIME

 

Codes réponse du serveur

Détail :

 

Client

Principaux navigateurs : Chrome, Firefox, Safari, Internet Explorer

 

en mode commande :


wget
(disponible sur IBMi avec 5733OPS et la PTF SI63051



curl (disponible sur IBMi avec 5733OPS et SI63905)

  abréviation de client URL request library :

cette commande :


Pour obtenir l'entête d'une page :



Pour tester un web service par GET


(ici 404 , Not found)

Pour tester un web service par POST

curl -i -H "Content-Type: application/json" -X POST 
-d '{"NOM":"Volubis", "VILLE":"Carquefou", "TEL":"02 40 30 00 70" , "FAX":"02 40 30 39 22", "APPEL_CODE":13}'
http://as400:10025/web/services/Producteur

(remarquez le retour avec Location: )


Fonctions SQL pour simuler un client HTTP


Ainsi que

 

Elles permettent de récuperer un BLOB (données binaires) ou un CLOB (du texte)

 

 

Serveur

Le serveur WEB le plus connu et le plus utilisé est APACHE, il est disponible sur IBMi depuis la V5R10.


Le serveur d'administration, lancé par STRTCPSVR *HTTP HTTPSVR(*ADMIN), utilise le port 2001



Il permet de créer de nouveaux serveurs.

Dans le cas d'un serveur Apache, voici les répertoires et les fichiers créés :

  • conf: contient httpd.conf
  • logs : contient
    • acces_log :   historique des accès (qui vient chez vous) ?
    • basic_error_log :  les problèmes rencontrés.
  • index.html : page d'accueil générée automatiquement.

détail de httpd.conf (version IBM i, tel que généré par l'assistant)

# Configuration originally created by Apache Setup Wizard Fri Jan 04 13:24:49 GMT
Listen 10.3.1.1:81
DocumentRoot /www/apache1/htdocs
DefaultType text/plain
Options None
ErrorLog logs/basic_error_log
LogLevel warn
DirectoryIndex index.html
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{User-agent}i" agent
LogFormat "%{Referer}i -> %U" referer
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log combined
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "MSIE 4\.0b2;" nokeepalive force-response-1.0
<Directory />
AllowOverride None
order deny,allow
deny from all
</Directory>
<Directory /www/apache1/htdocs>
AllowOverride None
order allow,deny
allow from all
</Directory>

Survol des principales Directives :

Listen 10.3.1.1:81 : adresse et port d'écoute


DocumentRoot
/www/apache1/htdocs : localisation des pages html


DirectoryIndex
index.html : définition de la (ou des ) page(s) d'accueil


LoadModule,
chargement d'un module externe (sous IBM i, un programme de service)


par exemple  :

LoadModule deflate_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM (module de compression)
LoadModule jk_module /QSYS.LIB/QHTTPSVR.LIB/QZTCJK.SRVPGM (connecteur Tomcat)

ErrorLog logs/basic_error_log : localisation des historiques d'erreur

LogFormat et CustumLog : format et localisation des historiques de consultation


BrowserMatch
, identification des navigateurs (sur une chaîne descriptive fournie par ce dernier)
cette directive permet de demander :

a/ à renseigner une (ou des) variable(s) d' environnement (variable=valeur).
b/ à utiliser certaines options spécifiques pour ce navigateur (NokeepAlive)

Options

ExecCGI, scripts CGI autorisés.

FollowSymLinks, autorise le serveur à suivre les liens symboliques dans IFS (résultat de la cde système ADDLNK)

SymLinksIfOwnerMatch, suivre les liens symboliques, si le propriétaire du lien est aussi le propriétaire de l'original.

Includes, autorise SSI ("include" ou copies de fichiers réalisées par le serveur à la volée)

IncludesNOEXEC, autorise SSI sauf dans le scripts CGI.

Indexes, autorise le serveur à produire une liste des documents d'un répertoire même s'il ne contient pas de fichier tel que définit dans DirectoryIndex (par défaut index.html)

Multiviews, autorise les documents à "contenu négocié", à l'affichage.

Il s'agit :

a/ de fichiers images, notés sans extensions, et le serveur envoi la plus petite des images trouvées et supportée par le navigateur (.gif ou .jpg)

b/ de fichiers texte dont l'extension présente la langue, le lien est noté toujours sans extension
(<A href="nom-du-fichier"...) et le fichier sera choisi selon la langue du navigateur
(.fr en français, .en en anglais, ...), par défaut cela n'est admis que pour les type mime connus

AddType, permet d'ajouter un type mime en précisant l'extension le caractérisant :

AddType      application/x-httpd-php          .php

Action, permet d'indiquer une action à entreprendre face à un type mime particulier

Action   application/x-httpd-php     /php-bin/php
(il faudra quand même avoir un ScriptAlias sur le répertoire /php-bin)

AddOutputFilterByType permet de demander un filtre de sortie (compression) par type MIME

AddOutputFilterByType   DEFLATE       text/html
SetOutPutFilter DEFLATE

(il faut avoir chargé le module deflate_module, voir plus haut)

AddOutputFilter  permet de demander un filtre de sortie (compression) par extension de fichier

AddOutputFilter   DEFLATE       .htm
SetOutPutFilter DEFLATE

(il faut avoir chargé le module deflate_module, voir plus haut)

Alias, permet de masquer la localisation réelle d'un ensemble de fichiers,en fournissant d'abord le nom d'un répertoire "virtuel", puis le nom du répertoire réel à utiliser (permet de masquer l'emplacement réel, mais aussi de "sortir" du répertoire indiqué par documentroot)

Alias    /images/                 /html/images/

ScriptAlias, idem, pour les programmes CGI, par exemple :

ScriptAlias    /cgi-bin/netdata/      /qsys.lib/cgi.lib/db2www.pgm/
ScriptAlias    /php-bin/                 /QOpenSys/php/bin/

Redirect, redirige la demande vers une autre URL en précisant un code erreur HTTP
(le navigateur recoit le code http et la nouvelle URL et se redirige alors vers cette dernière)

301 : Move permanently 302 : Move temporarily 410 : Gone (la nouvelle url ne doit pas être précisée)

Redirect   302    /as400     http://www.iseries.com/as400
Redirect   301    /unix       http://www.linux.fr

ProxyPass / ProxyPassReverse, le serveur Apache interroge pour vous un autre serveur, récupère la réponse et la fournit au client d'origine (proxy inversé),
Utilisé avec ZendCore, de facon à rediriger les requêtes vers le serveur Apache d'unix (sur le port 8000)

ProxyPass /php http://localhost:8000/exemplesphp
ProxyPassReverse /php http://localhost:8000/exemplesphp

il faut impérativement avoir chargé le module correspondat par
LoadModule proxy_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
LoadModule proxy_http_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM

<Directory> </Directory>, il s'agit d'un bloc donnant des droits et des options pour un répertoire uniquement.

vous devez placer vos directives entre <directory> et </directory> afin qu'elles ne portent que sur UN répertoire précis,
particulièrement :

Options (vu plus haut)

ATTENTION :
Option +ExecCGI, ajoute le droit de lancer des scripts
Option ExecCGI, donne le droit de lancer des scripts, mais RETIRE les autres options (annule et remplace)

Vous pouvez aussi utiliser les options avec le signe "-".

order, qui détermine vos priorités

allow,deny: tout ce qui n'est interdit est autorisé
deny,allow : tout ce qui n'est pas autorisé est interdit

allow from , indiquez all ou une adresse ip ou un début d'adresse, pour autoriser un répertoire à certains postes.

deny from, identique à allow (sur le plan de la syntaxe), indique les postes NON autorisés.


sur le même mode, vous trouverez

<Files> </Files>              liste des directives liées à un fichier

<Location> </Location> liste des directives liées à une URL et non une localisation (avant réécriture, par ScriptAlias par ex.)


Depuis les versions 7.1, 7.2 vous pouvez faire tourner le serveur Apache dans un sous-système séparé (et non QHTTPSVR)

pour cela


Pour mesurer la capacité de montée en charge de votre serveur HTTP, utilisez JMETER (http://jmeter.apache.org/)

 

Lancez jmeter.bat ou jmeter.sh



Ajoutez un groupe d'unités (Thread) représentant un nombre de client simultanés




Une configuration HTTP par défaut, contenant l'URL du serveur




S'il le faut des entêtes HTTP à transmettre





ici la clause Accept pour recevoir du Json

Un gestionnaire de cache, si vous voulez vider le cache à chaque requête


Une ou plusieurs variables aléatoires (si besoin)



Vous y ferez référence par ${prod}

insérez ensuite des requêtes à soumettre au serveur HTTP



Par exemple


Eventuellement plusieurs

Puis des récepteurs qui afficherons les résultats




Sauvegardez et lancez

 

Arbre de résultat
Graphique


Rapport agrégé

Au final vous trouverez vos temps de réponse moyen, la valeur médianne, etc...

Top


Copyright © VOLUBIS 2017