Bonjour,
il m'arrive un problème curieux.
J'ai créé un mini serveur sur un couple UNO V3 / Shield Ethernet 2 qui a besoin d'aller chercher des fichiers à "l'extérieur", pour des raisons évidentes de manque de mémoire, afin de les utiliser lors d'une requête adressée par un navigateur quelconque (sur mon réseau, bien sûr).
Pour que ces fichiers soient dispos depuis n'importe quel poste, il doivent être à des adresses accessibles quels que soient les postes ouverts ou éteints. Donc, soit chaque poste a un exemplaire des fichiers nécessaires, pas très élégant ni très évident avec les tablettes, soit ces fichiers doivent se trouver à une adresse toujours valide. Les deux solutions sont, à priori, soit l’hébergement sur un site externe, soit le stockage sur la box.
Quand j'héberge sur un site externe, ça fonctionne parfaitement, et donc, mon problème semble résolu. Mais j'aimerai que cela fonctionne également sur un réseau ethernet indépendant de la liaison internet. Je préfèrerais donc privilégier le stockage sur la box.
Je stocke donc mes fichiers sur une clé USB connectée à ma box et j'essaye de les récupérer. Et c'est là que le problème curieux se pose. Quand j'entre l'adresse IP que j'ai assignée à mon "serveur", la page se charge mais ne trouve pas les fichiers qui sont sur la box.
Maintenant, je fais un clic droit sur la page dans le navigateur et je clique sur "Code source de la page", je sélectionne ce code et le sauvegarde sous "toto.html". Et là, quand je clique sur "toto.html", la page s'ouvre dans le navigateur et les fichiers sont chargés. Il faut bien comprendre que c'est exactement le même code.
Je vous poste ici le code Arduino qui génère la page (une version simplifiée à l’extrême mais totalement opérationnelle. Pour l'exemple, les fichiers en question sont réduits à un simple fichier image. Habituellement, c'est plutôt du javascript, mais ça revient au même):
Je précise que dans l'adresse du fichier "image.png", "Livebox" est le nom natif de la box et "image" est le nom de la clé USB.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 #include <SPI.h> #include <Ethernet2.h> byte mac[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; IPAddress ipLocal(192, 168, 1, 200); EthernetServer serveurHTTP(80); void setup() { Ethernet.begin(mac, ipLocal); delay(1000); serveurHTTP.begin(); } void loop() { EthernetClient client = serveurHTTP.available(); if (client) { String reception = ""; if (client.connected()) { while (client.available()) { reception = reception + client.read(); //Vide le buffer pour ne charger la page qu'une fois } //Envoi de l'en-tête respectant le protocole HTTP client.println(F("HTTP/1.1 200 OK")); client.println(F("Content-Type: text/html")); client.println(F("Connnection: close")); client.println(); //Envoi de la page html client.println(F("<!DOCTYPE html>\n")); client.println(F("<html>\n")); client.println(F(" <head>")); client.println(F(" <meta charset=\"utf-8\" />")); client.println(F(" <title>Récupération d'une image sur clé USB dans la Livebox</title>")); client.println(F(" </head>\n")); client.println(F(" <body>")); client.println(F(" <p>La page est transmise correctement et est valide</p>")); client.println(F(" <img src=\"file://///Livebox/image/image.png\" alt=\"Mais l'image n'est pas téléchargée depuis la Livebox\" />")); client.println(F(" </body>\n")); client.println(F("</html>")); delay(1); client.stop(); } } }
Je téléverse ce code dans l' Arduino puis j'entre "192.168.1.200" dans la barre d'adresse du navigateur.
Voici la page qui s'affiche:
Je clique à droite sur la page:
pour afficher le code html de la page en cours:
puis je sélectionne ce code
que je sauvegarde sous "toto.html".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Récupération d'une image sur clé USB dans la Livebox</title> </head> <body> <p>La page est transmise correctement et est valide</p> <img src="file://///Livebox/image/image.png" alt="Mais l'image n'est pas téléchargée depuis la Livebox" /> </body> </html>
Quand je lance "toto.html", j'obtiens la page suivante:
Je ne comprend pas pourquoi le navigateur réagit différemment au même code en fonction de la façon dont il le reçoit.
Quelqu'un aurait-il une idée? Moi, je nage!
Désolé d'avoir été un peu long mais j'ai voulu essayer d'être clair.
Cordialement, naute.
Partager