Informatique Serveur HTTP écrit en Java (Weigelia)

Sixela

Développeur multi-langage
9 Mars 2015
190
40
85
France, Languedoc-Roussillion
Bonjour/Bonsoir,
avant de commencer, je tiens tout d'abord à préciser que ce n'est qu'un projet très jeune. Donc ne réalisez pas de serveur HTTP avec ce logiciel ! Préférez pour l'instant utiliser Apache © qui est bien plus développé que ce programme-ci ! Ce programme est dans un but pédagogique, pour découvrir le fonctionnement d'un serveur HTTP. Merci donc de bien vouloir utiliser ce programme pour tester seulement les capacités, et par la suite, faire des remarques, idées et rapports de bogues ici.

pour m'occuper et ainsi maintenir un projet à long terme, j'ai décidé d'écrire un serveur HTTP. Je l'ai appelé Weigelia. Les capacités/avantages de mon programme (pour l'instant) sont:
  • Configuration qui ressemble à la syntaxe de Apache ©
  • Console (affichage du traffic)
  • Affichage d'images
Certains vont dire que c'est pas tellement exceptionnel. Mais, je trouve ceci un bon début ;). Il faut savoir qu'un serveur HTTP envoie des informations pour que le navigateur et le client communique tout les deux. Il y en a de deux sortes: les entêtes clients (votre navigateur) et les entêtes serveur (les sites que vous consultez):

Exemple d'entête client:
Code:
Host: localhost:60
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Exemple d'entête serveur:
Code:
HTTP/1.0 200 OK
Date: Tue, 19 Mar 2017 18:19:30 GMT+1
Server: Weigelia/1.0
Content-Length: 5
Content-Type: text/plain
Connection: Closed

Hello

Si vous êtes perdu, c'est tout à fait normal. Je vais vous expliquer en détail ce qui se passe. Nous allons d'abord commencer avec le client:
Host: localhost:60: Cette ligne permet d'indiquer à quel adresse le navigateur demande des informations. C'est une ligne qui est importante; elle permet d'indiquer au serveur ce que l'utilisateur souhaite afficher.

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
: Cette ligne est aussi importante, elle permet d'indiquer quel navigateur l'utilisateur possède, la version et le nom du système d'exploitation, si le système est en 32-bit ou 64-bit, quel version le navigateur utilise et son nom de code.

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8: Cette ligne permet d'indiquer au serveur ce que le navigateur peut comprendre, décoder.

Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3: Cette ligne indique quels langages le navigateur posède. Utile si vous souhaitez que votre site s'adapte à la langue du navigateur.

Accept-Encoding: gzip, deflate:
Cette ligne permet d'indiquer qu'est ce que le navigateur peut aussi retranscrire en plus des encodages standards comme UTF-8 ou ASCII.

Connection: keep-alive: Cette ligne permet d'indiquer au navigateur s'il doit se déconnecter, rester en ligne pour attendre d'autre informations, ou alors d'autres types de connections.

Nous pouvons maintenant expliquer coté serveur:
HTTP/1.0 200 OK: Cette ligne permet de dire au client que le serveur n'a pas d'erreurs, que les informations sont correctes.

Date: Tue, 19 Mar 2017 18:19:30 GMT+1
: Cette ligne indique quand les informations ont étés envoyés.

Server: Weigelia/1.0: Cette ligne indique le nom et la version du serveur.

Content-Length: 5: Cette ligne permet de dire au client quel est la taille en bytes des informations (sans compter l'entête, le contenu des informations).

Content-Type: text/plain
: Cette ligne permet d'indiquer au client comment il devra l'interpréter. La valeur est exprimé en type MIME.

Connection: Closed
: Cette ligne permet d'indiquer au navigateur si il n'y a pas d'autres informations à envoyer après cet entête.

Hello: Cette ligne est en réalité le contenu des informations (fichier texte, page web avec photo, feuilles de style CSS, scripts...)

C'est tout pour les entêtes, je pense que les cerveaux de certains ont chauffés... :dsl:


Si vous souhaitez regarder les codes sources, j'ai crée une page GitHub ici; mais si vous souhaitez envoyer vos modifications, merci de faire des "pull requests" dans la branche Weigelia/pull-requests-here, merci :). Il faudra aussi penser à mettre tout en anglais, pour que tout le monde puisse comprendre sans à utiliser des traducteurs. Sur ce, je vous souhaite une excellente journée/soirée;

Redall.
 
Dernière édition:

Sixela

Développeur multi-langage
9 Mars 2015
190
40
85
France, Languedoc-Roussillion
Wow, alors là tu pars très loin xD
Personnellement, je trouve que ce serait pas très intéressent de vendre un logiciel comme ça, d'autant plus que je suis trop jeune pour justement vendre. C'est pas une mauvaise idée, mais d'autre part ça limiterait le fait de créer son propre serveur avec son propre site. Pour l'instant, je vais y réfléchir et lors que le logiciel sera bien plus comparable à Apache, peut être que je le vendrais. Je préfère malgré tout créer des logiciels qui sont accessibles par tout le monde, que ce soit pour l'amusement, ou pédagogiquement. Ce logiciel serait plus office d'exemple, qui met l'accent sur:
  1. Comment un serveur fonctionne en interne
  2. Comment un client et un serveur communique
  3. Comment ça fonctionne
  4. etc...
Pour résumer tout ça, je préfère faire des logiciels qui sont accessibles par tout le monde plutôt que le rendre privé. C'est dommage (personnellement) de gâcher la liberté de pouvoir créer son site et son serveur.

Je serais plutôt d'accord sur des gros logiciels, par exemple un logiciel de caisse...
 

Sixela

Développeur multi-langage
9 Mars 2015
190
40
85
France, Languedoc-Roussillion
Merci d'avoir éclairci le mot. Je pense en effet le mettre.

prod != vente

ce qui n'arrivera jamais
C'est pas en disant ça que tu vas aider les gens. Si c'est pour écrire des réponses dans ce genre là, je préfère que tu m'ignores et on en parle plus. Ça commence à devenir vraiment lourd ce que tu écris tout le temps. C'est un projet que je dois et m'efforcerai de le finir quoi que ce soit l'obstacle qu'il y a. Je pense que tu es une personne qui dans son but est de contrarier tout le temps les projets et idées d'autres personnes. Je veux bien que tu fasses des remarques et des critiques, mais ce qui sont pas constructives, je préfère que tu te les gardes.
 
Dernière édition par un modérateur:

Sixela

Développeur multi-langage
9 Mars 2015
190
40
85
France, Languedoc-Roussillion
Je vais changer ce nom pour un autre; merci.
J'ai changé ce nom pour Weigelia, qui est un... nom de plante (oui, je repasserais encore une fois pour l'originalité :p). Mais au moins, ça n'enfreint pas les règles que Apache met en place.

PS: Diagamma, qu'est ce que représente l'image dans ta signature ?
PS2: On va rester dans le sujet pour éviter les hors-sujets justement ;)
 
Dernière édition: