Verwenden von HTTP-ValidierungDer bessere Weg ist, um die HTTP-Validierung Modell verwenden. Dieses Modell sendet jede Antwort mit einem Ticket, das auf die Einzigartigkeit der Daten. Wenn der Kunde den Inhalt erneut herunterladen, sendet der Client dem Server ein Ticket aus dem letzten Download. Der Server vergleicht die gesendeten Ticket mit dem Ticket, das sie hat, und wenn der Server fest, die Karten identisch sind, sendet er eine HTTP-304 zeigen, keine Änderungen stattgefunden haben. An diesem Punkt kann der Client den alten Inhalt aus dem Cache abzurufen und präsentieren sie dem Benutzer als das Neueste und Beste. Der HTTP-Validierung Modell bedarf noch einer HTTP-Anforderung, aber es enthält nicht die Kosten für die Erstellung und Übermittlung der Inhalte wieder. Im Hinblick auf eine HTTP-Gespräch, ist der HTTP-Validierung Modell wie folgt implementiert. Dieses Beispiel zeigt eine Anfrage von einem Client und die Antwort vom Server. Request 1GET / ajax/chap04/cachedpage.html HTTP/1.1 Accept: * / * Accept-Language: de-de Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; . NET CLR 2.0.50215) Host: 127.0.0.1:8081 Connection: Keep-Alive Antwort 1HTTP/1.1 200 OK ETag: W / "45-1123668584000" Last-Modified: Wed, 10 Aug 2005 10:09:44 GMT Content-Type: text / html Content-Length: 45 Date: Fri, 10 Aug 2005 10: 11:54 GMT Server: Apache-Coyote/1.1 Cache-Inhalt
Der Client stellt eine Anfrage für das Dokument / ajax/chap04/cachedpage.html. Der Server antwortet mit dem Inhalt, aber es gibt keine Cache-Control oder Gültig-Kennung. Dies scheint darauf hinzudeuten, dass die Inhalte nicht wieder zwischengespeichert wird, aber das ist nicht wahr. Der Server hat angedeutet, dass er den HTTP-Validierung Modell verwendet, und nicht um die HTTP Ablauf Modell. Die Seite, die zurückgegeben wird, hat sich ein Teil des Cache durch die einzigartige ETag ausgewiesen werden können. Die ETag Kennung, eine so genannte Entity-TagKönnte, um einen eindeutigen Hash-Code für eine HTML-Seite verglichen. Der Buchstabe W, die dem Entity-Tag-Kennung vorangestellt ist, bedeutet, dass die Seite ein schwacher Verweis und dem HTTP-Server ist möglicherweise nicht sofort aktualisiert, um die Seite Nachdenken über die Server-Seite. Der nächste Schritt ist, um den Browser zu aktualisieren und fragen Sie nach der gleichen Seite erneut. Der HTTP-Gespräch ist wie folgt. Anfrage 2GET / ajax/chap04/cachedpage.html HTTP/1.1 Accept: * / * Accept-Language: de-de Accept-Encoding: gzip, deflate If-Modified-Since: Wed, 10 Aug 2005 10:09:44 GMT If - None-Match: W / "45-1123668584000" User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;. NET CLR 2.0.50215) Host: 192.168.1.100:8081 Connection: Keep-Alive Antwort 2HTTP/1.1 304 Not Modified Date: Fri, 10 Aug 2005 10:11:58 GMT Server: Apache-Coyote/1.1 Wenn der Client ist der zweite Antrag, die zusätzliche Angaben If-Modified-Since und If-None-Match gesendet werden in dem Antrag. Beachten Sie, wie die If-None-Match-Kennung bezieht sich auf die Kennung der zuvor gesendeten ETag-Wert. Der Server fragt die URL und generiert ein Entity-Tag. Wenn die Entity-Tag ist identisch mit dem Wert gesendet wird, gibt der Server einen HTTP-304-Code, um anzuzeigen, dass der Inhalt nicht verändert hat. Bei der Verwendung von Entity-Tags, kann der Client ein senden Wenn-Match oder ein If-None-Match. Wenn der Client sendet eine If-Match, und die Daten auf dem Server nicht mehr aktuell ist, der Server einen Cache-Miss Fehler zurückgibt, und nicht die neuen Daten. Wenn der Client sendet eine If-None-Match-ID, wenn der Server Daten unverändert geblieben ist, sendet der Server eine HTTP 304-Returncode. Wenn die Daten nicht mehr aktuell ist, werden neue Daten gesendet werden. Der Vorteil der Verwendung des HTTP-Validierung Modell des "Caching" ist, dass Sie in jedem Fall gewährleistet werden auf die neueste Version zum Zeitpunkt des Antrags zu erhalten. Die Kunden können den Antrag alle paar Sekunden, Stunden, Wochen, Zeit oder was auch immer sie sich entscheiden. Es ist Sache des Kunden zu entscheiden, wann eine neue Kopie der Daten zu erhalten. Zugegeben, es ist noch ein HTTP-Datenverkehr aufgrund der Anträge, aber es wurde Minimalbestellfrist reduziert. Nachdem alles gesagt, dass es Situationen gibt, bei der Verwendung des HTTP-Ablauf-Modell durchaus Sinn machen, zum Beispiel, wenn die HTML-Inhalt ist statisch und ändert nur selten . Der HTTP-Ablauf-Modell konnte in den einzelnen Anfrage-Modell verwendet werden, um Einträge aus dem Cache-Controller beschneiden, wenn sie schal geworden. Die Implementierung eines Client-Cache Verwenden von HTTP-Validierung Die einzigen Antrag Client-Cache kann erweitert werden, um HTTP-Validierung zu verwenden. Welche Veränderungen in der HTTP-Validierung Modells ist, dass eine physische Anforderung immer gemacht werden. Aus der Perspektive der Metadaten Navigation könnte dies eine kleine Verzögerung aufgrund der Notwendigkeit führen, einen Antrag zu überprüfen, ob die Daten aktuell zu machen ist. Allerdings ist die Anfrage Antwort-Zyklus recht schnell, als den meisten Fällen zu einem "nicht geändert" Antwort. Die vollständige Umsetzung der beiden benötigten Funktionen für asynchrone ist wie folgt. Quelle: / client / scripts / Jaxson / Common.js HttpValidationCacheController (var = _cache: new Array (), didNotFindETagError: function (url) ()) function HTTPValProcessAndBreakBeforeRequest (xmlhttp verlangen, settings) (if (request.action == "GET" ) (var obj = HttpValidationCacheController._cache [url]; if (obj! = null) ( this.xmlhttp.setRequestHeader ( "If-None-Match", obj.ETag); this.xmlhttp.setRequestHeader ( "Pragma", "no-cache"); this.xmlhttp.setRequestHeader ( "Cache-Control", "no-cache");)) Return false;) function HTTPValProcessAndBreakAfterRequest (xmlhttp verlangen, settings) (if (xmlhttp.status == 200 & & request.action == "GET") (if (xmlhttp.status == 200) (try (var foundetag = xmlhttp.getResponseHeader ( "ETag"); if (foundetag! = null) (HttpValidationCacheController._cache [url] = ( ETag: foundetag,Status: xmlhttp.status, StatusText: xmlhttp.statusText, ResponseText: xmlhttp.responseText, responseXML: XMLHTTP.responseXML);) else (HttpValidationCacheController.didNotFindETagError (url);)) catch (Exception) (HttpValidationCacheController.didNotFindETagError (url);) ) else if (status == 304) (var obj = HttpValidationCacheController._cache [url]; if (obj! = null) (var fakeXMLHttp = (status: 200, statusText: obj.StatusText, responseText: obj.ResponseText, responseXML: obj.ResponseXML,) try (settings.onComplete (fakeXMLHttp); return true;) catch (e) (globals.errorHandler (e);)) else (throw new Error ( "Server angegeben, dass diese Daten im Cache");))) return false;)
Werfen Sie einen Moment Zeit, um den Code zu prüfen. Sie sollten viele Ähnlichkeiten zu sehen, die einzelne Anfrage Client-Cache-Code. Die wichtigsten Unterschiede sind durch Fettdruck hervorgehoben. Ein großer Unterschied in der HTTPValProcessAndBreakBeforeRequest Anfrage ist der Zusatz von den HTTP-Header Validierung Ermittlung der ETag für einen zuvor ausgeführten Anfrage. Da HTTP-Validierung mittels Erledigung eines Ersuchens, hat HTTPValProcessAndBreakBeforeRequest auf "false" in allen Situationen zurück. Die HTTPValProcessAndBreakAfterRequest Funktion ist komplizierter, da ihre Logik ist raffinierter. Wenn HTTP-Validierung verwendet wird und die Validierung HTTP-Server unterstützt, dann kann der Server mit zwei HTTP-Status-Codes für jede Anforderung: 200 und 304 zu reagieren. Wenn der Status-Code 200, entweder die Daten geändert haben oder die Daten nicht verändert wurden. Unabhängig von der Grund für die Status-Code 200, muss die Daten an die HttpValidationCacheController Cache-Instanz hinzugefügt werden. Die einen großen Unterschied in Bezug auf die einzelne Anfrage Client-Cache ist die zusätzliche Speicherung der ETag. Wenn der Status-Code 304 ist, dann eine gefälschte XMLHttpRequest-Instanz erstellt und die settings.onComplete Methode aufgerufen wird, wie in der einzigen Antrag Client-Cache Umsetzung dargestellt. Festlegung und Durchführung der REST-URLs Die Architektur und die Umsetzung der Client von einem allgemeinen " was zu tun ist "Perspektive abgeschlossen ist. Wir müssen noch die Einzelheiten der URLs und die Architektur des Servers abdecken. An dieser Stelle möchte ich zeigen, um Ihr Gedächtnis aufzufrischen. Die Trennung zwischen dem Senden und Empfangen von Daten ist sehr wichtig, weil es ist, was macht es möglich, für einen Kunden einen Antrag machen heute und fragen Sie nach der Antwort von morgen. Wenn die Frage und Antwort lautete, die im Rahmen einer einzigen Anfrage, dann hätte der Kunde für eine sehr lange warten. Um dies in einem anderen Kontext zu stellen, kann man denke nur an die Trennung von Anfrage und Antwort als die Differenz zwischen in einer Schlange stehen für die Unterstützung in einem Geschäft und wählen Sie eine Nummer für Hilfe. Stellen Sie sich vor Einkaufs-und Kauf einige besonders große Stücke von Holz. Jedes Holz Geschäft hat seine eigene Strategie der Service für die Kunden. Eine Strategie ist es, die Kunden Line-Up (Queue) haben und ihrerseits zu warten. Aber was, wenn die Zeile lang ist? Werden Sie versucht sein, in Einklang zu bekommen? Was passiert, wenn Sie sich entscheiden, in Einklang zu bekommen und erkennen, dass Sie um auf die Toilette gehen, oder Sie brauchen, um etwas Geld in die Parkuhr gelegt haben? In dem Moment, Sie aus der Linie, verlieren Sie Ihre Position und haben zu den wartenden Spiel von Anfang an beginnen. Aus architektonischer Sicht Warteschlangen sind für den Server ärgerlich, weil der Server benötigt, um den Antrag zu verwalten und zu halten, die Aufmerksamkeit der Client-Verbindung. Ein weiterer Ansatz, und dass ein gerechter, ist, dass jeder Kunde will, die ein besonderes Stück Holz wählt eine Nummer und füllt eine Bestellung aufgeben. Der Auftrag ist ein Verkäufer vorgelegt, und er oder sie wird Ihnen sagen, etwa, wenn das Holz zur Verfügung stehen. Während der Wartezeit können Sie auf die Toilette zu gehen, zu Mittag essen, oder kaufen für andere Dinge. Die Reihenfolge und Token-Konzept macht es möglich, den wartenden Kunden aus dem Speicher zu entkoppeln, um die Zeit es braucht, um die besonderen Holzreste vorbereitet zu optimieren. Zum Beispiel, sich auf eine Reihe von Aufträgen beruhen, kann das Geschäft die Aufträge auf die vorrangigen, die Fähigkeit der Grundlage Warteschlange, und Komplexität. Diese Architektur ist einzigartig, weil Sie einen HTTP-POST verwenden, um die Bestellung und erhalten Sie einen Hinweis auf zurückzukehren, wo die Code finden Sie die Antwort. Sie haben nicht die Angabe, wie könnte programmatisch bestimmt werden kann. Im Fall von dem Ticker-Anwendung, wird die Position programmatisch festgelegt. / pyservices / Händler / historisch-Ticker Dies entspricht einem Root-URL, HTTP POST und GET akzeptiert. Ausführen eines GET gibt eine Liste mit Links zu allen verfügbaren Ergebnisse. Die Ergebnisse könnten Ergebnisse in der reinen Berechnung Sinn oder, im Fall von dem Ticker-Anwendung, eine Auflistung der freien Tickers beobachtet zu werden. Anreise eine Auflistung aller verfügbaren Ergebnisse ist nutzlos, wenn Sie nicht wissen, was die Auflistung bedeutet. Die Ticker-Applikation mit seiner Auflistung ist leicht zu entziffern, da jedes Ergebnis eines überwachten Ticker darstellt. Aber was, wenn die Root-URL stellt eine Rechnung? Das Potenzial Anzeige der Ergebnisse URLs können Zufallszahlen zur Indexierung der einzelnen Ergebnisse umfassen. Dies verdeutlicht die Tatsache, dass es äußerst wichtig, dass die Ergebnisse bei einigen der Basis von Metadaten zu unterscheiden. Wenn Sie nicht tun, werden Sie in die wichtigsten Probleme stoßen. Manchmal, aber Sie wollen nicht alle Metadaten-Deskriptoren. Wenn die Post führt eine Berechnung, wenn das Ergebnis ist nur sinnvoll, in einem bestimmten Kontext, dann ist es die Verantwortung des Kunden den Überblick über die Links zu halten. Bezieht man diesen Begriff in einen Warenkorb, haben die meisten speichert sie, und es gibt keine Metadaten Schlagwort. Wenn Sie in ein Geschäft, wissen Sie, welche Warenkorb für Sie auf der Grundlage der Artikel im Warenkorb gehört. Es gibt keine Kennung für den Wagen, und in den Worten eines großen britischen Komikers: "Bis Sie kaufen die Inhalte in Ihrem Warenkorb, es ist eine gute Möglichkeit der Neuordnung der Lebensmittel in einem Geschäft." Ich möchte darauf hinweisen, dass ja Sie können die Ergebnisse ohne Metadaten zu erzeugen, aber diese Fälle spezialisiert ist (und in Artikel 7 geregelt wird) werden. Bei der Ausführung eines POST an die Root-URL, werden Sie beginnen eine Aufgabe auf der Server-Seite. Ab Aufgaben auf einem HTTP-Server kann eine Herausforderung sein, da HTTP-Server die gesamte Verarbeitung erwartet abgeschlossen werden, wenn die Anfrage beendet. Jedoch wegen der Art der Daten, ist dies nicht möglich, deshalb müssen Sie auf Ihren Server zu erweitern. Erweitern Sie Ihre Server kann so einfach sein wie ein Thread ausgeführt, um die Aufgabe auszuführen, oder es kann bedeuten, dass ein Inter-Anruf zu starten einen Prozess, um die Aufgabe auszuführen. Unabhängig davon, wie Sie die Aufgabe ausgeführt werden, ist der wichtigste Aspekt, um die Ausführung der Aufgabe im Rahmen des Antrags. Die Rolle der POST-Methode ist, um die Daten für eine Aufgabe zu verbinden, und dann eine Aufgabe auszuführen. Nach dem Antrag vorgelegt worden ist, sollte der Server wieder eine Kennung, dass die Aufgabe darstellt. Die Kennung könnte der Metadaten, eine zufällige Zahl, oder eine beliebige Verbindung. Die zurückgegebenen Informationen sollten genügend Daten für den Kunden bieten, algorithmisch eine vollständige Anbindung an die Daten und Metadaten zu schaffen. Wenn die Post nicht beliebiger Reihenfolge Informationen zu liefern, dann ist die Annahme, dass der Kunde weiß, wie man die Metadaten und Link aus den vorgelegten Daten zu komponieren. Der Nachteil dieser Strategie ist, dass, wenn der Server-Side-Metadaten Änderungen, die Client-Code muss aktualisiert werden. / pyservices / Händler / geschichtlichen / Ticker / DELL Diese URL steht für die Root-URL des Ergebnisses. Nur die HTTP-Verben GET und DELETE werden unterstützt. Das Verb POST gefördert werden können, wenn Sie das Ergebnis einer Anfrage neu berechnen wollen. Die Beschäftigung mit der Durchführung einer Neuberechnung ist, dass in einer Mehrbenutzer-Situation, andere Nutzer sehen die neuen Daten und nicht bewusst sein, dass einige Teile der Daten inzwischen verändert haben. Generell ist es besser, zu einem Ergebnis als unveränderlich zu betrachten. Die GET-Verb wird unterstützt, damit Abrufen der Ergebnisse. Die DELETE wird unterstützt, um ein Ergebnis aus der Liste zu beschneiden. Ein Schnitt ist notwendig, damit der Cache nicht mit alten Ergebnisse, die keine Bedeutung haben überfüllt sein. Im Falle des Tickers Anwendung würde, DELETE nicht angebracht, weil Ticker Geschichte ist eine Zeitreihe, und man kann die Uhr zurückdrehen. Beschneiden einer Zeitreihe ist nur geeignet, wenn Sie einige Daten, die als alt und nicht geeignet für den Kontext haben. / pyservices/trader/historical/tickers/DELL/2006 Diese URL steht für einen bestimmten Teil des Ergebnisses und gegebenenfalls, sollte stets unterstützt werden. Unterstützung Kind URLs in Folge kann der Client-Code, um die Feinabstimmung des Ergebnisses. / pyservices / Händler / geschichtlichen / Ticker / DELL? Filter = now Diese URL ist eine weitere Möglichkeit der Feinabstimmung der Ergebnisse. Zum Beispiel, wenn ein Ergebnis zu viele Daten erzeugt, mit dem Filter mit einem Wert von jetzt konnten die Feinabstimmung des Ergebnisses an den letzten 15. Feinsteuerungsoperationen nicht Gefahr laufen, fehlende Ergebnisse. Angenommen, Sie warten auf alle Ergebnisse aus einer Berechnung, und daher regelmäßig Aufruf der letzten 15 Ergebnisse abzurufen. Was ist, wenn die Prüfung beträgt eine Stunde, und während einer Stunde, 30 Ergebnisse generiert werden? Mit Hilfe eines Filters auf den letzten 15 bedeutet, dass Sie 15 Treffer verpasst haben, abrufen. Sie sollten nicht eine Aufgabe Ansatz beim Abrufen der letzten 15 deletes1 die Stabilität zu wahren und die Fähigkeit, Ergebnisse, die möglicherweise verloren gegangen sein nachlesen, wenn Sie einen Browser beendet das Herunterladen des Daten. Sie suchen eine Möglichkeit, eine Verfüllung auszuführen, wo die einzige zuverlässige Cache oder Speicher-Mechanismus ist der Server. Der beste Weg, um die Feinabstimmung der zurückgegebenen Daten ist, um einen Cursor auf das Ergebnis verwendet werden soll. Zum Beispiel sollte, wenn es 15 Ergebnisse in einer Berechnung, zusätzlich zu den genannten URLs jedes Ergebnis sind referenziert werden über eine eindeutige URL identifiziert das Ergebnis ein. Denken Sie an das Ergebnis Zahl als Teil einer Zeitreihe. In einer Zeit, Serie können Sie abrufen, alle Zecken in einer Stunde, sondern auch alle Zecken in einer Minute und alle Zecken in einer Sekunde. Ein Artikel eingereicht von Sonja Lande Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle. Wichtig: Dieser Artikel "Verwenden von HTTP-Validierung" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.
|
|||||
| Online: 411 users browsing the articles directory |
|
|