2009-07-01 2 views
0

Diese Frage bezieht sich auf eine RESTful ROA (Resource-Oriented Architecture). Eine Ressource im Web hat eine URL (oder einen URI, falls Sie dies bevorzugen), z. B. http://myserver.com/me.jpg.URL für eine Ressource auf dem lokalen Rechner in REST ROA

Sie können eine Datei auf dem lokalen (Windows) Rechner wie folgt erhalten: file: /// C: /MyPictures/me.jpg. Dies ist nicht genau ein "Universal" Resource Identifier; Es funktioniert nicht richtig, wenn Sie es auf einem anderen Computer versuchen. Auf deiner Maschine kann das ein Bild von dir sein anstatt von mir.

Angenommen, ich möchte eine Anwendung entwerfen, in der Dateien in einen Webdienst kopiert werden können. Andere Benutzer auf anderen Computern können sie vom Webdienst herunterladen, aber wenn Sie sie von der ursprünglichen Maschine verwenden, werden sie aus Gründen der Geschwindigkeit aus dem lokalen Dateisystem abgerufen.

Gibt es ein Konzept eines URI, das sich auf eine Datei auf einem bestimmten Computer bezieht, wenn es sich um den lokalen Computer handelt? Gibt es ein Konzept eines URI für eine bestimmte Maschine? IP-Adresse ist nicht genug; Die IP-Adresse meiner Maschine lautet 192.168.0.102 und Ihre ist möglicherweise auch.

Ich würde gerne eine Reihe von Orten für das Foto als erste Wahl, zweite Wahl usw. speichern. Erste Wahl = file: /// C: /MyPictures/me.jpg aber nur wenn die lokale Maschine die Maschine ist kam aus; zweite Wahl = http://myserver.com/me.jpg.

Eine andere Möglichkeit, die gleiche Frage zu stellen: Diese Maschine ist einzigartig, und die Datei unter C: //somedir/somefile.jpg ist einzigartig. Hat es eine eindeutige Adresse? Eine Adresse, die entweder "Keine Route zum Host" oder die richtige Datei liefert, je nachdem, wo Sie sie angefordert haben?

Antwort

1

Gibt es einen Begriff eine URI, dass auf einer bestimmten Maschine auf eine Datei verweist, wenn er die lokale Maschine passiert sein?

Folgen wir der Logik. Wie ist das zu bestimmen? Die URI muss unbedingt einen Namen enthalten, der die Maschine eindeutig identifiziert.

Daher muss Ihr Computer durch einen öffentlich registrierten Namen identifiziert werden. Sie haben eindeutig festgestellt, dass eine private IP-Adresse nicht ausreicht.

So lautet die Antwort:

  • Ihre Maschine öffentlich zugänglich sein müssen (via Proxy, wenn hinter einer Firewall) von einem öffentlich identifiziert Namen.

  • Dieser Name muss auch direkt zu Ihrem Rechner aufgelöst werden (nicht durch eine Firewall), wenn Sie Effizienz im "lokalen laufenden Fall" wollen.

Die Einstellung ist maschinenabhängig. Aber vorausgesetzt, Sie hinter einer NAT-Firewall sind die Proxys virtuellen Server unterstützt ...

  1. Registrieren Sie den eindeutigen Namen in der entsprechenden DNS-Server, haben es auf die öffentlich gerichteten IP zu lösen.

  2. Richten Sie einen virtuellen Server auf Ihrer Firewall ein, der auf Ihre interne Adresse verweist.

  3. Richten Sie einen Webserver auf Ihrem lokalen Computer ein.

  4. Stellen Sie sicher, dass Ihr lokaler Computer selbst konfiguriert ist (in/etc/hosts oder Windows), um diese öffentliche Adresse Ihrer 192.168-Adresse zuzuordnen.

Das macht es im Grunde. Unmöglich, sich vorzustellen, wie es sonst noch wäre. Nein, es ist nicht möglich, dass ein einzelner URI als "Try file: // in diesem Fall oder standardmäßig als http: //" definiert wird. Die Definition der URI ist ein einziges System, wie hier beschrieben:

http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax

+0

Die Maschine muss adressierbar sein, muss aber nicht öffentlich zugänglich sein. Wie das Gold in Fort Knox, weißt du, wo es ist, auch wenn du es nicht erreichen kannst. Sie benötigen keinen lokalen Webserver, wenn Sie das Schema "Datei" verwenden. Zum Beispiel kann ich auf "file: //blackbeauty/shareddocs/myfile.txt" zugreifen, aber nur, weil shareddocs der Name einer Dateifreigabe ist. "Blackbeauty" ist einzigartig in meinem Netzwerk, aber nicht universell. Dies ist ein möglicher, aber nicht völlig zufriedenstellender Weg, dies zu tun. –

0

Sie sind beide richtig und falsch. Während zwei Computer innerhalb eines Netzwerksegments den gleichen Namen oder die gleiche IP-Adresse haben können, existieren sie nur innerhalb dieses Netzwerks.

Wenn Sie eine Datei und eine Maschine eindeutig identifizieren möchten, dann ist file: //blackbeauty.mydomain.org/c: \ myfile.txt vollkommen akzeptabel, in dem Sinne, dass der Name blackbeauty von mydomain "gehört" wird .org.

Sie benötigen also eine Möglichkeit, Maschinen im FQDN zu adressieren, wenn die URL auflösbar sein soll.

+0

Die URL-Datei: //blackbeauty.mydomain.org/c:/myfile muss von keiner Stelle außer blackbeauty.mydomain.org selbst auflösbar sein. An anderer Stelle im lokalen Netzwerk aufzulösen ist gut, aber nicht erforderlich. Das ist also eine gute Lösung, wenn es einen Domänennamen gibt, der den Computer "besitzt". Ich suche immer noch nach einer Möglichkeit, eine Maschine eindeutig zu identifizieren, die nicht adressierbar oder sogar unbedingt identifizierbar ist. Alles, was ich wissen muss, ist: Verbindet John heute den gleichen Computer wie gestern? Cookies sind eine Teillösung. –

+0

Sie wollen also eine Kennung für diese Maschine, die im Laufe der Zeit konstant ist, ohne eine zentrale Autorität? Ich fürchte, ich verstehe wirklich nicht viel, was das Problem mit der Verwendung von file: // machinename/c ist. Es ist ohne zentrale Autorität, ist im Laufe der Zeit konstant und Sie brauchen es nicht für etwas anderes als lokale Auflösung verwendet werden, wie Sie erwähnen, Sie brauchen es nicht adressierbar oder identifizierbar. Cookies sind vom Server ausgegebene Persistenzsäcke, wenn Sie bereits Zugang zur lokalen Maschine haben, warum sollten Sie sich damit beschäftigen? Es sei denn, Sie beziehen sich auf die Verwendung eines Browsers für lokale Auflösungen. – SerialSeb

Verwandte Themen