Apache Mime Typ Binär Optionen


Umgang mit Binärdaten mit Axis2 (MTOMSwA) Einleitung Trotz Flexibilität, Interoperabilität und globaler Akzeptanz von XML gibt es Zeiten, in denen Serialisierung von Daten in XML nicht sinnvoll ist. Web-Services-Benutzer können Binär-Attachments von verschiedenen Sorten wie Bilder, Zeichnungen, XML-Dokumente usw. zusammen mit einer SOAP-Nachricht übertragen. Solche Daten sind oft in einem bestimmten Binärformat. Traditionell wurden zwei Techniken für den Umgang mit opaken Daten in XML verwendet. Das Senden von binären Daten durch den Wert wird durch Einbettung von opaken Daten (natürlich nach irgendeiner Form von Codierung) als Element - oder Attributinhalt der XML-Komponente von Daten erreicht. Der Hauptvorteil dieser Technik ist, dass es Anwendungen die Möglichkeit gibt, Daten zu verarbeiten und zu beschreiben, die nur auf der XML-Komponente der Daten basieren. XML unterstützt undurchsichtige Daten als Inhalt durch die Verwendung von entweder base64 oder hexadezimaler Textcodierung. Beide Techniken blasen die Größe der Daten auf. Für die UTF-8-zugrunde liegende Textcodierung erhöht die Base64-Codierung die Größe der Binärdaten um einen Faktor von 1,33x der ursprünglichen Größe, während die Hexadezimalcodierung Daten um den Faktor 2x erweitert. Die obigen Faktoren werden verdoppelt, wenn UTF-16 Textcodierung verwendet wird. Auch von besorgniserregend ist der Overhead in den Bearbeitungskosten (sowohl real als auch wahrgenommen) für diese Formate, vor allem bei der Dekodierung wieder in rohe Binärdatei. Das Senden von Binärdaten durch Referenz wird durch das Anfügen von reinen Binärdaten als externe, nicht gepardete allgemeine Entitäten außerhalb des XML-Dokuments und anschließendes Einbetten von Referenz-URIs an diese Entitäten als Elemente oder Attributwerte erreicht. Dies verhindert das unnötige Aufblasen von Daten und Verschwendung von Rechenleistung. Das primäre Hindernis für die Nutzung dieser unparsed Entities ist ihre starke Abhängigkeit von DTDs, die Modularität sowie die Verwendung von XML-Namespaces beeinträchtigt. Es gab mehrere Spezifikationen, die in der Web-Service-Welt eingeführt wurden, um mit diesem binären Attachment-Problem unter Verwendung der quotby-Referenzquot-Technik umzugehen. SOAP mit Attachments ist ein solches Beispiel. Da SOAP Dokumenttyp-Deklarationen (DTD) in Meldungen verbietet, führt dies zu dem Problem, Daten nicht als Teil des Meldungs-Infosets darzustellen und damit zwei Datenmodelle zu erzeugen. Dieses Szenario ist wie das Senden von Anhängen mit einer E-Mail-Nachricht. Auch wenn diese Anhänge mit dem Nachrichteninhalt zusammenhängen, sind sie nicht in der Nachricht. Dies führt dazu, dass die Technologien, die die Daten auf der Grundlage der XML-Komponente der Daten verarbeiten und beschreiben, zu Fehlfunktionen führen. Ein Beispiel ist WS-Security. Wo ist MTOM Come In MTOM (SOAP Message Transmission Optimization Mechanism) ist eine weitere Spezifikation, die auf die Lösung der quotAttachmentsquot Problem konzentriert. MTOM versucht, die Vorteile der beiden oben genannten Techniken zu nutzen, indem man versucht, die beiden Techniken zusammenzuführen. MTOM ist eigentlich ein quotby-Referenzquot-Verfahren. Das Drahtformat einer MTOM-optimierten Nachricht ist dasselbe wie die SOAP mit Attachments-Nachricht, die es auch rückwärts kompatibel mit SwA-Endpunkten macht. Das bemerkenswerteste Merkmal von MTOM ist die Verwendung des XOP: Include-Elements, das in der XML Binary Optimized Packaging (XOP) - Spezifikation definiert ist, um auf die binären Attachments (externe ungepufferte allgemeine Entitäten) der Nachricht zu verweisen. Mit der Verwendung dieses exklusiven Elements wird der angehängte Binärinhalt logisch inline (mit dem Wert) mit dem SOAP-Dokument, obwohl er tatsächlich separat angehängt ist. Dies verschmilzt die beiden Bereiche, indem es möglich ist, nur mit einem Datenmodell zu arbeiten. Dies ermöglicht es den Anwendungen zu verarbeiten und zu beschreiben, indem man nur den XML-Teil betrachtet, wodurch die Abhängigkeit von DTDs veraltet ist. Auf einer leichteren Note hat MTOM den Referenzmechanismus von SwA standardisiert. Das folgende ist ein Auszug aus der XOP-Spezifikation. Auf der konzeptionellen Ebene können diese Binärdaten als Basis64-codiert im XML-Dokument betrachtet werden. Da diese konzeptionelle Form bei einer Verarbeitung des XML-Dokuments erforderlich ist (z. B. zum Signieren des XML-Dokuments), ist es notwendig, eine Eins-zu-Eins-Korrespondenz zwischen XML-Infosets und XOP-Paketen zu haben. Daher ist die konzeptionelle Darstellung solcher Binärdaten so, als wäre sie base64-codiert, wobei die kanonische lexikalische Form des XML-Schema base64Binary-Datentyps verwendet wurde (siehe XML-Schema Teil 2: Datentypen Second Edition 3.2.16 base64Binary). In umgekehrter Richtung ist XOP in der Lage, nur base64-codierte Infoset-Daten zu optimieren, die in der kanonischen lexikalischen Form vorliegen. Apache Axis2 unterstützt Base64-Codierung. SOAP mit Attachments und MTOM (SOAP Message Transmission Optimization Mechanism). MTOM mit Axis2 Programmiermodell AXIOM ist (und kann das erste) Objektmodell sein, das die Fähigkeit hat, binäre Daten zu halten. Es hat diese Fähigkeit, wie OMText rohen binären Inhalt in Form von javax. activation. DataHandler halten kann. OMText wurde zu diesem Zweck aus zwei Gründen ausgewählt. Einer ist, dass XOP (MTOM) in der Lage ist, nur base64-codierte Infoset-Daten zu optimieren, die sich in der kanonischen lexikalischen Form des XML-Schema base64Binary-Datentyps befinden. Anderes ist, das Infoset sowohl im Sender als auch im Empfänger zu bewahren. (Um den Binärinhalt in der gleichen Art von Objekt zu speichern, unabhängig davon, ob es optimiert ist oder nicht). MTOM ermöglicht die selektive Verschlüsselung von Teilen der Nachricht, die es uns ermöglicht, basendecodierte Daten sowie extern angehängte rohe Binärdaten zu senden, die durch das in einer SOAP-Nachricht zu sendende quotXOPquot-Element (optimierter Inhalt) referenziert werden. Sie können festlegen, ob ein OMText-Knoten, der rohe Binärdaten oder base64encodierte Binärdaten enthält, qualifiziert ist, um zum Zeitpunkt des Aufbaus dieses Knotens oder später optimiert zu werden. Für eine optimale Effizienz von MTOM empfiehlt es sich, kleinere Binär-Anhänge mit Base64encoding (nicht optimiert) und größeren Anhängen als optimierten Inhalt zu versenden. Außerdem kann ein Benutzer einen optimierbaren Binärinhaltsknoten unter Verwendung eines base64-codierten Strings erstellen, der einen codierten Binärinhalt enthält, der mit dem MIME-Typ der tatsächlichen Binärdarstellung versehen ist. Axis2 verwendet javax. activation. DataHandler, um die Binärdaten zu verarbeiten. Alle optimierten Binärinhaltsknoten werden als Base64-Strings serialisiert, wenn quotMTOM nicht aktiviert ist. Sie können auch binäre Content-Knoten erstellen, die auf keinen Fall optimiert werden. Sie werden serialisiert und als Base64 Strings verschickt. Aktivieren der MTOM-Optimierung auf der Client-Seite In Optionen setzen Sie die quotenableMTOMquot-Eigenschaft auf True beim Senden von Nachrichten. Wenn diese Eigenschaft auf True gesetzt ist, wird jede SOAP-Hüllkurve, unabhängig davon, ob sie einen optimierbaren Inhalt enthält oder nicht, als MTOM-optimierte MIME-Nachricht serialisiert. Axis2 serialisiert alle Binär-Content-Knoten als Base64-codierte Strings, unabhängig davon, ob sie qualifiziert sind, um optimiert zu werden oder nicht, wenn die quotenableMTOMquot-Eigenschaft auf False gesetzt ist. Wenn der Umschlag enthält Elementinformationen des Namens xop: Include (siehe XML-Binär optimierte Verpackung 3. XOP Infosets Constructs). Der Benutzer muss nichts angeben, damit Axis2 MTOM-optimierte Nachrichten empfangen kann. Axis2 identifiziert und de-serialisiert entsprechend, wie und wann eine MTOM-Nachricht eintrifft. Aktivieren der MTOM-Optimierung auf der Serverseite Der Axis 2-Server identifiziert automatisch eingehende MTOM-optimierte Meldungen basierend auf dem Content-Typ und de-serialisiert sie entsprechend. Der Benutzer kannMTOM auf der Serverseite für ausgehende Nachrichten aktivieren, Um MTOM global für alle Dienste zu aktivieren, können Benutzer den quotenableMTOMquot-Parameter in der Axis2.xml auf True setzen. Wenn es gesetzt ist, werden alle ausgehenden Nachrichten serialisiert und als MTOM-optimierte MIME-Nachrichten gesendet. Wenn es nicht gesetzt ist, werden alle Binärdaten in den Binärinhaltsknoten als Base64-codierte Zeichenfolgen serialisiert. Diese Konfiguration kann in services. xml auf der Basis von pro Service und pro Operation überschrieben werden. Sie müssen den Server nach der Einstellung dieses Parameters neu starten. Zugriff auf empfangene Binärdaten (Beispielcode) Apache-Tutorial: Dynamischer Inhalt mit CGI Das CGI (Common Gateway Interface) definiert eine Möglichkeit für einen Web-Server, mit externen Content-generierenden Programmen zu interagieren, die oft als CGI-Programme oder CGI-Scripts bezeichnet werden. Es ist die einfachste und häufigste Möglichkeit, dynamische Inhalte auf Ihre Website zu stellen. Dieses Dokument wird eine Einführung in die Einrichtung von CGI auf Ihrem Apache Web-Server, und immer mit dem Schreiben von CGI-Programme. Um Ihre CGI-Programme ordnungsgemäß zu arbeiten, müssen Sie Apache konfiguriert haben, um die CGI-Ausführung zu ermöglichen. Es gibt mehrere Möglichkeiten, dies zu tun. Hinweis: Wenn Apache mit freigegebener Modulunterstützung gebaut wurde, müssen Sie sicherstellen, dass das Modul in Ihrer httpd. conf geladen ist. Sie müssen sicherstellen, dass die LoadModule-Richtlinie nicht kommentiert wurde. Eine korrekt konfigurierte Direktive kann wie folgt aussehen: Unter Windows oder mit einem nicht-threaded MPM wie Prefork kann eine korrekt konfigurierte Anweisung wie folgt aussehen: Die ScriptAlias-Direktive teilt Apache mit, dass ein bestimmtes Verzeichnis für CGI-Programme beiseite gelegt wird. Apache wird davon ausgehen, dass jede Datei in diesem Verzeichnis ein CGI-Programm ist, und wird versuchen, es auszuführen, wenn diese bestimmte Ressource von einem Client angefordert wird. Die ScriptAlias-Direktive sieht wie folgt aus: ScriptAlias ​​cgi-bin usrlocalapache2cgi-bin Das Beispiel, das gezeigt wird, stammt aus Ihrer Standard-Konfigurationsdatei von httpd. conf, wenn Sie Apache in der Standardposition installiert haben. Die ScriptAlias-Direktive ist ähnlich wie die Alias-Direktive, die ein URL-Präfix definiert, das einem bestimmten Verzeichnis zugeordnet ist. Alias ​​und ScriptAlias ​​werden normalerweise für Verzeichnisse verwendet, die sich außerhalb des DocumentRoot-Verzeichnisses befinden. Der Unterschied zwischen Alias ​​und ScriptAlias ​​ist, dass ScriptAlias ​​die zusätzliche Bedeutung hat, dass alles unter diesem URL-Präfix als ein CGI-Programm betrachtet wird. Also, das obige Beispiel teilt Apache mit, dass jede Anfrage für eine Ressource, die mit cgi-bin beginnt, aus dem Verzeichnis usrlocalapache2cgi-bin bedient werden sollte. Und sollte als CGI-Programm behandelt werden. Wenn zum Beispiel die URL examplecgi-bintest. pl angefordert wird, versucht Apache, die Datei usrlocalapache2cgi-bintest. pl auszuführen und die Ausgabe zurückzugeben. Natürlich muss die Datei existieren und ausführbar sein und die Ausgabe auf eine bestimmte Art und Weise zurückgeben, oder Apache gibt eine Fehlermeldung zurück. CGI-Programme sind oft aus Sicherheitsgründen auf ScriptAlias ​​ed Verzeichnisse beschränkt. Auf diese Weise können Administratoren fest kontrollieren, wer CGI-Programme verwenden darf. Wenn jedoch die entsprechenden Sicherheitsvorkehrungen getroffen werden, gibt es keinen Grund, warum CGI-Programme nicht aus beliebigen Verzeichnissen ausgeführt werden können. Zum Beispiel können Sie möchten, dass Benutzer Webinhalte in ihren Home-Verzeichnissen mit der UserDir-Direktive haben. Wenn sie ihre eigenen CGI-Programme haben wollen, aber keinen Zugriff auf das Haupt-Cgi-bin-Verzeichnis haben, müssen sie in der Lage sein, CGI-Programme an anderer Stelle auszuführen. Es gibt zwei Schritte, um die CGI-Ausführung in einem beliebigen Verzeichnis zu ermöglichen. Zuerst muss der cgi-script-Handler mit der AddHandler - oder SetHandler-Direktive aktiviert werden. Zweitens muss ExecCGI in der Optionsrichtlinie angegeben werden. Sie können die Optionsrichtlinie explizit in Ihrer Hauptserver-Konfigurationsdatei verwenden, um festzulegen, dass die CGI-Ausführung in einem bestimmten Verzeichnis erlaubt wurde: ltDirectory usrlocalapache2htdocssomedirgt Optionen ExecCGI ltDirectorygt Die obige Anweisung teilt Apache mit, dass sie die Ausführung von CGI-Dateien zulassen kann. Sie müssen auch dem Server mitteilen, welche Dateien CGI-Dateien sind. Die folgende AddHandler-Direktive teilt dem Server mit, dass er alle Dateien mit der cgi - oder pl-Erweiterung als CGI-Programme behandeln soll: AddHandler cgi-script. cgi. pl Das. htaccess-Tutorial zeigt, wie man CGI-Programme aktiviert, wenn man keinen Zugriff auf httpd. conf hat. Um die Programmierung von CGI-Programmen für alle Dateien zu ermöglichen, die in. cgi in Benutzerverzeichnissen enden, können Sie die folgende Konfiguration verwenden. LtDirectory homepublichtmlgt Optionen ExecCGI AddHandler cgi-script. cgi ltDirectorygt Wenn Sie ein cgi-bin-Unterverzeichnis eines Benutzer-Verzeichnisses benennen möchten, in dem alles als CGI-Programm behandelt wird, können Sie folgendes verwenden. LtDirectory homepublichtmlcgi-bingt Optionen ExecCGI SetHandler cgi-script ltDirectorygt Es gibt zwei Hauptunterschiede zwischen regulärer Programmierung und CGI-Programmierung. Zuerst muss allen Ausgabe aus Ihrem CGI-Programm ein MIME-Typ-Header vorangestellt werden. Dies ist HTTP-Header, der dem Client mitteilt, welche Art von Inhalt es empfängt. Die meiste Zeit wird das aussehen: Zweitens muss deine Ausgabe in HTML oder ein anderes Format sein, das ein Browser anzeigen kann. Die meiste Zeit wird das HTML sein, aber gelegentlich kannst du ein CGI-Programm schreiben, das ein Gif-Bild oder andere Nicht-HTML-Inhalte ausgibt. Abgesehen von diesen beiden Sachen, das Schreiben eines CGI-Programms wird viel wie jedes andere Programm aussehen, das Sie schreiben könnten. Das folgende ist ein Beispiel-CGI-Programm, das eine Zeile zu Ihrem Browser druckt. Geben Sie folgendes ein, speichern Sie es in einer Datei namens first. pl. Und leg es in dein cgi-bin Verzeichnis. Usrbinperl print Inhaltstyp: texthtmlnn print Hallo, Welt. Auch wenn du mit Perl nicht vertraut bist, solltest du sehen können, was hier passiert Die erste Zeile sagt Apache (oder was auch immer Shell Sie zufällig laufen), dass dieses Programm ausgeführt werden kann, indem Sie die Datei an den Dolmetscher an der Stelle usrbinperl gefunden werden. Die zweite Zeile druckt die von uns gesprochene Inhaltstyp-Deklaration, gefolgt von zwei Wagen-Return-Newline-Paaren. Dies legt eine leere Zeile nach dem Header, um das Ende der HTTP-Header und den Anfang des Körpers anzuzeigen. Die dritte Zeile druckt den String Hallo, Welt .. Und das ist das Ende von ihm. Wenn du deinen Lieblingsbrowser öffnest und es sagst, um die Adresse zu bekommen, oder wo immer du deine Akte stellst, wirst du die eine Zeile Hallo, Welt sehen. Erscheinen in Ihrem Browser-Fenster. Es ist nicht sehr aufregend, aber sobald man das funktioniert, youll haben eine gute Chance, immer etwas zu arbeiten. Es gibt vier grundlegende Dinge, die Sie in Ihrem Browser sehen können, wenn Sie versuchen, auf Ihr CGI-Programm aus dem Internet zuzugreifen: Die Ausgabe Ihres CGI-Programms Great Das bedeutet, dass alles gut funktioniert hat. Wenn die Ausgabe korrekt ist, aber der Browser es nicht korrekt verarbeitet, stellen Sie sicher, dass Sie den richtigen Content-Type in Ihrem CGI-Programm eingestellt haben. Der Quellcode Ihres CGI-Programms oder eine POST-Methode Nicht zugelassene Nachricht Das bedeutet, dass Sie Apache nicht ordnungsgemäß konfiguriert haben, um Ihr CGI-Programm zu verarbeiten. Lesen Sie den Abschnitt über die Konfiguration von Apache und versuchen Sie zu finden, was Sie verpasst haben. Eine Nachricht, die mit Forbidden beginnt Das bedeutet, dass es ein Berechtigungsproblem gibt. Überprüfen Sie das Apache-Fehlerprotokoll und den Abschnitt unten auf Dateiberechtigungen. Eine Meldung, die den internen Serverfehler sagt Wenn Sie das Apache-Fehlerprotokoll überprüfen. Sie werden wahrscheinlich feststellen, dass es heißt, vorzeitige Ende der Skript-Header, möglicherweise zusammen mit einer Fehlermeldung, die von Ihrem CGI-Programm generiert wird. In diesem Fall möchten Sie jeden der folgenden Abschnitte überprüfen, um zu sehen, was Ihr CGI-Programm daran hindern könnte, die richtigen HTTP-Header auszusenden. Denken Sie daran, dass der Server nicht wie Sie läuft. Das heißt, wenn der Server startet, läuft es mit den Berechtigungen eines unprivilegierten Benutzers - in der Regel niemand. Oder www - und so wird es zusätzliche Berechtigungen benötigen, um Dateien auszuführen, die dir gehören. Normalerweise ist die Art und Weise, um eine Datei genügend Berechtigungen zu geben, um von niemand ausgeführt zu werden, um allen die Vollständigkeitsberechtigung für die Datei zu geben: chmod ax first. pl Auch wenn dein Programm von anderen Dateien liest oder schreibt, werden diese Dateien benötigt Die richtigen Berechtigungen haben, um dies zu erlauben. Wenn du ein Programm von deiner Befehlszeile aus hast, hast du bestimmte Informationen, die an die Shell weitergegeben werden, ohne dass du darüber nachdenkst. Zum Beispiel hast du einen PATH. Die die Shell sagt, wo sie nach Dateien suchen kann, die Sie verweisen. Wenn ein Programm durch den Webserver als CGI-Programm läuft, darf es nicht dasselbe PATH haben. Alle Programme, die Sie in Ihrem CGI-Programm aufrufen (zB sendmail.) Müssen durch einen vollständigen Pfad angegeben werden, damit die Shell sie finden kann, wenn sie versucht, Ihr CGI-Programm auszuführen. Eine gemeinsame Manifestation davon ist der Weg zum Skript-Interpreter (oft perl), der in der ersten Zeile deines CGI-Programms angezeigt wird, die so aussehen wird: Vergewissern Sie sich, dass dies tatsächlich der Weg zum Dolmetscher ist. Bei der Bearbeitung von CGI-Skripten unter Windows können End-of-Line-Zeichen an den Interpreterpfad angehängt werden. Stellen Sie sicher, dass Dateien im ASCII-Modus auf den Server übertragen werden. Wenn dies nicht der Fall ist, kann es zu Befehlen fehlen, Warnungen aus dem Betriebssystem zu finden, da das nicht erkannte End-of-Line-Zeichen als Teil des Dateinamens des Interpreters interpretiert wird. Wenn Ihr CGI-Programm von nicht standardmäßigen Umgebungsvariablen abhängt. Sie müssen sicherstellen, dass diese Variablen von Apache übergeben werden. Wenn Sie HTTP-Header aus der Umgebung verpassen, stellen Sie sicher, dass sie nach RFC 2616 formatiert sind. Abschnitt 4.2: Header-Namen müssen mit einem Brief beginnen, gefolgt von Buchstaben, Zahlen oder Bindestrich. Jeder Header, der diese Regel verletzt, wird stillschweigend fallen gelassen. Die meiste Zeit, wenn ein CGI-Programm ausfällt, ist es wegen eines Problems mit dem Programm selbst. Dies ist besonders wahr, wenn man den Hang dieses CGI Zeug bekommt und nicht mehr die beiden Fehler macht. Das erste, was zu tun ist, um sicherzustellen, dass Ihr Programm läuft von der Kommandozeile vor dem Testen über den Webserver. Zum Beispiel, versuchen Sie: cd usrlocalapache2cgi-bin. first. pl (nicht den Perl-Interpreter aufrufen Die Shell und Apache sollten den Interpreter mit den Pfadinformationen in der ersten Zeile des Skripts finden.) Das erste, was du von deinem geschrieben hast Programm sollte ein Satz von HTTP-Headern sein, einschließlich der Content-Type. Gefolgt von einer Leerzeile. Wenn Sie etwas anderes sehen, gibt Apache das vorzeitige Ende des Skriptheaderfehlers zurück, wenn Sie versuchen, es durch den Server auszuführen. Weitere Informationen finden Sie unter Schreiben eines CGI-Programms. Die Fehlerprotokolle sind dein Freund. Alles, was schief geht, erzeugt eine Nachricht im Fehlerprotokoll. Du solltest immer zuerst dort hinschauen. Wenn der Ort, an dem Sie Ihre Website hosten, nicht erlaubt Ihnen den Zugriff auf das Fehlerprotokoll, sollten Sie wahrscheinlich Host Ihre Website irgendwo anders. Lernen Sie, die Fehlerprotokolle zu lesen, und youll finden Sie, dass fast alle Ihre Probleme schnell identifiziert werden und schnell gelöst werden. Das suexec-Support-Programm ermöglicht es, dass CGI-Programme unter verschiedenen Benutzerberechtigungen ausgeführt werden können, je nachdem, welches virtuelle Host - oder Benutzer-Home-Verzeichnis sie sich befinden. Suexec hat eine sehr strenge Berechtigungsprüfung und jeder Fehler bei dieser Überprüfung führt dazu, dass Ihre CGI-Programme fehlschlagen Frühzeitiges Ende für die Kopfzeile des Skripts . Um zu überprüfen, ob Sie suexec verwenden, führen Sie apachectl - V aus und überprüfen Sie den Standort von SUEXECBIN. Wenn Apache bei der Inbetriebnahme eine Suexec-Binärdatei findet, wird suexec aktiviert. Wenn du Suexec nicht verstehst, solltest du es nicht benutzen. Um suexec zu deaktivieren, entfernen Sie einfach die Suexec-Binärdatei, die von SUEXECBIN angezeigt wird, und starten Sie den Server neu. Wenn nach dem Lesen über suexec. Du möchtest es immer noch verwenden, dann suexec - V ausführen, um den Speicherort der suexec-Protokolldatei zu finden und diese Logdatei zu verwenden, um zu finden, welche Richtlinie du verletze. Wie Sie in CGI-Programmierung weiter fortgeschritten werden, wird es sinnvoll, mehr über das, was hinter den Kulissen geschieht, zu verstehen. Genauer gesagt, wie der Browser und der Server miteinander kommunizieren. Denn obwohl es alles sehr gut ist, um ein Programm zu schreiben, das Hallo, Welt, druckt, ist es nicht besonders nützlich. Umgebungsvariablen sind Werte, die um Sie herum schwimmen, während Sie Ihren Computer benutzen. Sie sind nützliche Dinge wie Ihr Weg (wo der Computer sucht nach der eigentlichen Datei, die einen Befehl implementiert, wenn Sie ihn eingeben), Ihren Benutzernamen, Ihren Terminal-Typ und so weiter. Für eine vollständige Liste Ihrer normalen, jeden Tag Umgebungsvariablen geben Sie env an einer Eingabeaufforderung ein. Während der CGI-Transaktion legen der Server und der Browser auch Umgebungsvariablen fest, damit sie miteinander kommunizieren können. Dies sind Dinge wie der Browsertyp (Netscape, IE, Lynx), der Servertyp (Apache, IIS, WebSite), der Name des CGI-Programms, das ausgeführt wird, und so weiter. Diese Variablen stehen dem CGI-Programmierer zur Verfügung und sind die Hälfte der Geschichte der Client-Server-Kommunikation. Die vollständige Liste der erforderlichen Variablen ist bei Common Gateway Interface RFC. Dieses einfache Perl CGI Programm zeigt alle Umgebungsvariablen an, die herumgeführt werden. Zwei ähnliche Programme sind im Verzeichnis cgi-bin der Apache-Distribution enthalten. Beachten Sie, dass einige Variablen erforderlich sind, während andere optional sind, so dass Sie möglicherweise einige Variablen aufgeführt haben, die nicht in der offiziellen Liste waren. Darüber hinaus bietet Apache viele verschiedene Möglichkeiten für Sie, um Ihre eigenen Umgebungsvariablen zu den grundlegenden, die standardmäßig zur Verfügung gestellt. Usrbinperl print Inhaltstyp: texthtmlnn foreach Schlüssel (Tasten ENV) Drucktaste --gt ENV ltbrgt Andere Kommunikation zwischen dem Server und dem Client erfolgt über Standard-Eingang (STDIN) und Standardausgang (STDOUT). Im normalen alltäglichen Kontext bedeutet STDIN die Tastatur oder eine Datei, auf die ein Programm vergeben wird, und STDOUT bedeutet normalerweise die Konsole oder den Bildschirm. Wenn Sie ein Web-Formular an ein CGI-Programm weitergeben, werden die Daten in diesem Formular in ein spezielles Format gebündelt und an Ihr CGI-Programm über STDIN ausgeliefert. Das Programm kann dann diese Daten verarbeiten, als ob es von der Tastatur kommen würde, oder aus einer Datei Das spezielle Format ist sehr einfach. Ein Feldname und sein Wert werden mit einem equals () - Zeichen verknüpft, und Wertepaare werden mit einem Und-Zeichen verbunden. Unbequeme Charaktere wie Räume, Bekenntnisse und Gleiche Zeichen, werden in ihre Hex-Äquivalent umgewandelt, so dass sie nicht gum up die Werke. Der ganze Datenstring könnte so aussehen: Youll sieht manchmal auch diese Art von String an eine URL angehängt. Wenn das fertig ist, setzt der Server diese Zeichenfolge in die Umgebungsvariable namens QUERYSTRING. Das ist eine GET-Anfrage. Ihr HTML-Formular gibt an, ob ein GET oder ein POST verwendet wird, um die Daten zu liefern, indem Sie das METHOD-Attribut in das FORM-Tag setzen. Ihr Programm ist dann verantwortlich für die Aufteilung dieser Zeichenfolge in nützliche Informationen. Glücklicherweise gibt es Bibliotheken und Module zur Verfügung, um Ihnen zu helfen, diese Daten zu verarbeiten, sowie behandeln andere der Aspekte Ihres CGI-Programms. Wenn du CGI-Programme schreibst, solltest du eine Codebibliothek oder ein Modul verwenden, um die meisten Grunzen für dich zu tun. Dies führt zu weniger Fehlern und schnellerer Entwicklung. Wenn Sie CGI-Programme in Perl schreiben, sind Module auf CPAN verfügbar. Das beliebteste Modul für diesen Zweck ist CGI. pm. Sie können auch CGI :: Lite betrachten. Die einen minimalen Satz von Funktionalität implementiert, was alles ist, was man in den meisten Programmen braucht. Wenn Sie CGI-Programme in C schreiben, gibt es eine Vielzahl von Optionen. Eines davon ist die CGIC-Bibliothek, von boutellcgic. Es gibt eine große Anzahl von CGI-Ressourcen im Internet. Die Liste aus der HTML Writers Guild ist eine gute Antwort auf Ihre Fragen. Sie können mehr bei hwg. orglistshwg-server erfahren. Die aktuelle CGI-Spezifikation ist im Common Gateway Interface RFC verfügbar. Wenn du eine Frage nach einem CGI-Problem stellst, das du hast, ob zu einer Mailingliste oder zu einer Newsgroup, stell dir sicher, dass du genug Informationen darüber hast, was passiert ist, was du erwartet hast und wie was eigentlich passiert war, was Server war Sie laufen, welche Sprache Ihr CGI-Programm war, und, wenn möglich, der beleidigende Code. Dies wird die Suche nach Ihrem Problem viel einfacher. Beachten Sie, dass Fragen zu CGI-Problemen niemals in die Apache-Bug-Datenbank gebucht werden sollten, es sei denn, Sie sind sicher, dass Sie ein Problem im Apache-Quellcode gefunden haben. Hinweis: Dies ist kein QampA-Abschnitt. Kommentare, die hier platziert werden, sollten auf Vorschläge zur Verbesserung der Dokumentation oder des Servers hingewiesen werden und können von unseren Moderatoren wieder entfernt werden, wenn sie entweder implementiert oder als ungültiges Thema betrachtet werden. Fragen zum Verwalten des Apache HTTP Servers sollten entweder auf unseren IRC-Kanal, httpd, auf Freenode oder auf unsere Mailinglisten geschickt werden. Copyright 2017 Die Apache Software Foundation. Lizenziert unter der Apache-Lizenz, Version 2.0.Generiert die Textdarstellung dieses Inhaltstyps, der als Wert eines Content-Type-Headers verwendet werden kann. Erstellt eine neue Instanz von ContentType. Parameter: mimeType - MIME-Typ. Es darf nicht null oder leer sein. Es darf keine Zeichen ltgt, ltgt, lt, gt enthalten durch die HTTP-Spezifikation. Charset - charset Rückgabewert: Inhaltstyp Erstellt eine neue Instanz von ContentType ohne Zeichensatz. Parameter: mimeType - MIME-Typ. Es darf nicht null oder leer sein. Es darf keine Zeichen ltgt, ltgt, lt, gt enthalten durch die HTTP-Spezifikation. Returns: content type Erstellt eine neue Instanz von ContentType. Parameter: mimeType - MIME-Typ. Es darf nicht null oder leer sein. Es darf keine Zeichen ltgt, ltgt, lt, gt enthalten durch die HTTP-Spezifikation. Charset - charset Es darf keine Zeichen ltgt, ltgt, lt, gt enthalten durch die HTTP-Spezifikation. Dieser Parameter ist optional. Rückgabewert: Inhaltstyp Throws: UnsupportedCharsetException - Wird ausgelöst, wenn der genannte Charset in dieser Instanz der Java Virtual Machine nicht verfügbar ist. Erstellt eine neue Instanz von ContentType mit den angegebenen Parametern. Parameter: mimeType - MIME-Typ. Es darf nicht null oder leer sein. Es darf keine Zeichen ltgt, ltgt, lt, gt enthalten durch die HTTP-Spezifikation. Params - Parameter. Rückgabewert: Inhaltstyp Throws: UnsupportedCharsetException Seit: 4.4 Analysiert die Textdarstellung des Content-Type-Werts. Parameter: s - text Rückgabewert: Inhaltstyp Throws: ParseException - wenn der angegebene Text keinen gültigen Content-Type-Wert darstellt. Nicht unterstützteCharsetException - Wird ausgelöst, wenn der genannte Zeichensatz in dieser Instanz der Java Virtual Machine nicht verfügbar ist. Extrahiert den Content-Type-Wert von HttpEntity genau wie im Content-Type-Header der Entität angegeben. Gibt null zurück, wenn nicht angegeben. Parameter: entity - HTTP entity Rückgabewert: content type Throws: ParseException - wenn der angegebene Text keinen gültigen Content-Type-Wert darstellt. Nicht unterstütztCharsetException - Wird ausgelöst, wenn der genannte Zeichensatz in dieser Instanz der Java Virtual Machine nicht verfügbar ist. GetLenient extrahiert den Content-Type-Wert von HttpEntity. Rückgabewerte null, wenn nicht angegeben oder falsch (konnte nicht analysiert werden) Parameter: entity - HTTP entity Rückgabewert: content type Seit: 4.4 getOrDefault Extrahiert den Content-Type-Wert von HttpEntity oder gibt den Standardwert DEFAULTTEXT zurück, wenn nicht explizit angegeben. Parameter: entity - HTTP entity Rückgabewert: content type Throws: ParseException - wenn der angegebene Text keinen gültigen Content-Type-Wert darstellt. Nicht unterstützteCharsetException - Wird ausgelöst, wenn der benannte Zeichensatz in dieser Instanz der Java Virtual Machine nicht verfügbar ist getLenientOrDefault Extrahiert den Content-Type-Wert von HttpEntity oder gibt den Standardwert DEFAULTTEXT zurück, wenn nicht explizit angegeben oder falsch (konnte nicht analysiert werden). GetByMimeType Gibt Content-Type für den angegebenen MIME-Typ zurück. Parameter: mimeType - MIME-Typ Rückgabewert: Inhaltstyp oder Null, wenn nicht bekannt. Seit: 4.5 mitCharset Erstellt eine neue Instanz mit diesem MIME-Typ und dem angegebenen Zeichensatz. Parameter: charset - charset Gibt eine neue Instanz mit diesem MIME-Typ und dem angegebenen Zeichensatz zurück. Seit: 4.3 mitCharset Erstellt eine neue Instanz mit diesem MIME-Typ und dem angegebenen Charset-Namen. Parameter: charset - name Gibt eine neue Instanz mit diesem MIME-Typ und dem angegebenen Charset-Namen zurück. Throws: UnsupportedCharsetException - Wird ausgelöst, wenn der genannte Charset in dieser Instanz der Java Virtual Machine nicht verfügbar ist Seit: 4.3 withParameters Erstellt eine neue Instanz mit diesem MIME-Typ und den angegebenen Parametern. Parameter: params - Rückgabewert: eine neue Instanz mit diesem MIME-Typ und den angegebenen Parametern. Throws: UnsupportedCharsetException Seit: 4.4In ubuntu, ich laufe einfache html-Seite, die mp4-Video laufen kann, habe ich Apache Server konfiguriert und habe einfache Test-Seite für Hallo Welt, seine funktionieren gut. Im Apache Webserver habe ich gelesen, dass wir den folgenden Code in die Datei httpd. conf oder eine. htaccess-Datei im Verzeichnis hinzufügen müssen, in dem unsere Videodateien sind. Also meine Frage ist, wo ist diese httpd. conf oder. htaccess-Datei zur Verfügung, muss man manuell diese Dateien erstellen oder sie sind irgendwo gespeichert. Der Code meiner HTML-Seite ist so: Bitte geben Sie mir die Vorschläge. Die Standardkonfigurationsdatei für die Dateien, die von Ihrer Apache-Installation bedient werden, ist etcapache2sites-enabled000-default. Es ist eine gute Idee, die Originaldatei zu sichern, bevor du mit dieser Datei herumspielt. Jedes Mal, wenn Sie diese Datei bearbeiten, muss Apache neu gestartet werden, damit die Änderungen wirksam werden - sudo service apache2 restart (oder) sudo service apache2 reload. Wohingegen Änderungen in. htaccess nicht benötigen Apache neu gestartet werden. Wie schon erwähnt, geht die. htaccess-Datei in den DocumentRoot der Website. Schauen Sie sich die offizielle Dokumentation zum Aktivieren von. htaccess-Dateien an. Um die. htaccess-Dateien wie erwartet zu bearbeiten, müssen Sie diese Datei bearbeiten: Suchen Sie nach einem Abschnitt, der so aussieht: Sie müssen die Zeile mit AllowOverride None ändern, um AllowOverride All zu lesen. Dies sagt Apache, dass es in Ordnung ist,.htaccess-Dateien zu erlauben, um vorherige Anweisungen zu überfahren. Du musst Apache neu laden, bevor diese Änderung einen Effekt hat: 2009.12.08 Hinweis: In der LAMP Download vor etwa einer Woche mit Ubuntu 9.10 (Karmic) war die Standard-Konfigurationsdatei etcapache2sites-available000-default und enthielt AllowOverride None unter ltDirectory gt in Zusätzlich zu ltDirectory varwwwgt. Auch Verzeichnisse in wwwvar mit. htaccess-Dateien defauliert, um nicht den Apache-Server Lesezugriff, was in der Apache-Fehler Um zu beheben, sudo nautilus dann mit der rechten Maustaste auf das Verzeichnis mit der. htacces s-Datei, wählen Sie Eigenschaften, dann wählen Sie Berechtigungen und Geben Sie der Benutzergruppe, die Sie sich als mindestens Leseberechtigung anmelden.

Comments