Gerhard: Problem mit Mime-type/Content-type

Hallo,

auf meinem Rechner hat die Datei sitemap.xml den content-type: application/xml, auf dem Server nach dem Hochladen den content-type: text/html.
Was muss ich beim Hochlaen beachten oder wie kann ich den Wert auf dem Server ändern?

  1. @@Gerhard

    auf meinem Rechner hat die Datei sitemap.xml den content-type: application/xml, auf dem Server nach dem Hochladen den content-type: text/html.
    Was muss ich beim Hochlaen beachten oder wie kann ich den Wert auf dem Server ändern?

    Um was für einen Server handelt es sich denn?

    Wenn Apache, dann AddType Directive.

    Kwakoni Yiquan

    --
    Ad astra per aspera
    1. Hallo Gunnar Bittersmann,

      .xml sollte aber doch eigentlich von jedem Webserver per Default als application/xml ausgeliefert werden, oder?

      Rolf

      --
      sumpsi - posui - obstruxi
      1. @@Rolf B

        .xml sollte aber doch eigentlich von jedem Webserver per Default als application/xml ausgeliefert werden, oder?

        Das hab ich mich auch gefragt. Aber wer weiß, was manche Hoster da voreinstellen. XML wird wohl unterbewertet.

        Kwakoni Yiquan

        --
        Ad astra per aspera
        1. Habe jetzt in .htaccess eingefügt:

          AddType application/xml .xml

          Trotzdem bleibt es bei text/xml

          1. Hallo Gerhard,

            oookay. Gerade auf unserem Selfhtml-Server ausprobiert: ohne weitere Angaben kommt text/xml. Was ja eigentlich auch ein XML Typ ist.

            AddType hat bei mir geholfen, aber möglicherweise ist diese Direktive bei Dir nicht freigeschaltet. Da unser Server nicht untervermietet ist, haben wir überall AllowOverride All gesetzt.

            Rolf

            --
            sumpsi - posui - obstruxi
            1. Hallo Rolf,
              wenn es dir nichts ausmacht, könntest Du dann Deine Datei (Typ text/xml) mit

              Validate

              testen?

              Falls auch bei Dir die Fehlermeldung kommt, ist der Validator ungeeignet, denn bei Dir funktioniert ja sitemap.xml in der Textform.

              1. Hallo Gerhard,

                denn bei Dir funktioniert ja sitemap.xml in der Textform.

                Die Gerüchte von einer funktionierenden Sitemap sind weit übertrieben, denn dass Du eine Validatorfehlermeldung bekommen hast und die einem falschen MIME-Typ zuschreibst, war mir nicht bewusst. Mir ging's nur darum, ob eine text/xml Ressource vom Browser als XML akzeptiert wird, und meine Datei sah so aus:

                <?xml version="1.0"?>
                <root>
                Hello World
                </root>
                

                Chrome zeigte das als XML an, mit der Ein-/Ausklappfunktion für Elemente. Aber als Sitemap validiert das nicht 😀. Tatsächlich hat keine Selfhtml-Site eine sitemap.xml. Die wäre arg umfangreich, und ob die was bringt? Bisher hat mir Google bei typischen Suchen nach HTML Referenzthemen immer Selfhtml relativ weit vorn angezeigt, das kann natürlich daran liegen, dass Google weiß, dass ich mich für Selfhtml interessiere.

                Ich habe mal eine Dummy-Sitemap für das Testwiki gemacht: https://wiki-test.selfhtml.org/sitemap-test.xml, mit URLs für ein paar unserer Portalseiten.

                Die wird als text/xml ausgeliefert und das Validate-Tool ist zufrieden damit.

                This tool will check if your xml sitemap is formatted correctly and optionally ping Google to inform them of your sitemap location.

                Hm. Hoffentlich hat es das nicht gemacht 🙄.

                Rolf

                --
                sumpsi - posui - obstruxi
                1. Mit meinem oben zitierten Tool kommt beim Test die Fehlermeldung

                  Incorrect http header content-type: "text/html; charset=UTF-8" (expected: "application/xml")

                  Ich nehme dahe an, dass die Fehlermeldung falsch ist und das die Text-Version der Datei von Google akzeptiert wird.

                  1. Hallo Gerhard,

                    vom Selfhtml-Server kommt kein charset-Parameter im Content-Type. Da kann es nun diverse Gründe geben, warum das nicht akzeptiert wird, und keiner davon wäre stichhaltig…

                    • eine charset-Angabe im Content-Type - sollte nicht verboten sein.
                    • ein Space hinter dem Semikolon - ist definitiv nicht verboten
                    • UTF-8 statt utf-8 - die Kleinschreibung ist empfohlen, charset ist aber als case-insensitive definiert

                    Es gibt noch einen ganzen Haufen anderer Online-Validatoren. Liefern die den gleichen Fehler?

                    Rolf

                    --
                    sumpsi - posui - obstruxi
                    1. Hallo Rolf,

                      Es gibt noch einen ganzen Haufen anderer Online-Validatoren. Liefern die den gleichen Fehler?

                      Z.B. https://products.aspose.app/html/de/sitemap-validator allerdings meldet der nur 1 Fehler, aber nicht welchen.
                      Ich hatte noch zwei weitere mit Fehler und andere ohne Fehler.
                      Es ist also nicht alles Gold, was glänzt.

                      1. Hallo Gerhard,

                        dann wäre also mal die erste Frage: Ist deine Sitemap überhaupt falsch? Oder sind es die Fehlermeldungen?

                        Magst Du uns deren URL verraten?

                        Rolf

                        --
                        sumpsi - posui - obstruxi
                  2. Moin Gerhard,

                    Mit meinem oben zitierten Tool kommt beim Test die Fehlermeldung

                    Incorrect http header content-type: "text/html; charset=UTF-8" (expected: "application/xml")

                    moment, ist die Fehlermeldung genau so wie hier wiedergegeben? Da steht nämlich als Typ text/html, daher glaube ich schon, dass eigentlich xml erwartet wird.

                    Viele Grüße
                    Robert

                    1. Hallo

                      Mit meinem oben zitierten Tool kommt beim Test die Fehlermeldung

                      Incorrect http header content-type: "text/html; charset=UTF-8" (expected: "application/xml")

                      moment, ist die Fehlermeldung genau so wie hier wiedergegeben? Da steht nämlich als Typ text/html, daher glaube ich schon, dass eigentlich xml erwartet wird.

                      Das ist seit Anbeginn des Threads das Thema.

                      auf meinem Rechner hat die Datei sitemap.xml den content-type: application/xml,
                      auf dem Server nach dem Hochladen den content-type: text/html.

                      Hervorhebungen von mir.

                      Tschö, Auge

                      --
                      „Habe ich mir das nur eingebildet, oder kann der kleine Hund wirklich sprechen?“ fragte Schnapper. „Er behauptet, nicht dazu imstande zu sein“ erwiderte Victor. Schnapper zögerte (…) „Nun …“ sagte er schließlich, „ich schätze, er muss es am besten wissen.“ Terry Prattchett, Voll im Bilde
                      1. Hallo Auge,

                        nomen est omen 😉

                        Tatsächlich habe ich das html nicht wahrgenommen. Wenn text/html kommt, dann ist eine Fehlermeldung des Validators wohl angemessen.

                        Wir hatten aber die AddType-Direktive diskutiert, Gerhard hatte sie ausprobiert, und dann schrieb er, es käme immer noch text/xml.

                        Hm. Wasn nu?

                        Rolf

                        --
                        sumpsi - posui - obstruxi
                        1. Hallo

                          Hallo Auge,

                          nomen est omen 😉

                          Manchmal klappt's ja immer noch.

                          Tatsächlich habe ich das html nicht wahrgenommen. Wenn text/html kommt, dann ist eine Fehlermeldung des Validators wohl angemessen.

                          Jepp.

                          Wir hatten aber die AddType-Direktive diskutiert, Gerhard hatte sie ausprobiert, und dann schrieb er, es käme immer noch text/xml.

                          In diesem Posting? Nicht, dass er sich in seinem Beitrag zwischen text/xml und text/html vertan hat. Schließlich formulierte er „Trotzdem bleibt es bei text/xml“.

                          Hm. Wasn nu?

                          Ich habe mich tatsächlich selten mit so etwas herumschlagen müssen. Entweder waren die Server und Webspaces, auf denen ich zu tun hatte, korrekt eingerichtet, so dass XML von vornherein mit text/xml oder application/xml ausgeliefert wurde, ich hatte eine UI des Webspaces, um solche Sachen festlegen zu können, oder ich habe per PHP generierte Inhalte ausgeliefert, bei denen ich den passenden Mimetype per Header selbst bestimmen konnte.

                          Wenn aber, wie Robert und du in dem anderen Fussel dieses Fadens herausgearbeitet habt, text/xml ein Synonym zu application/xml ist, frage ich mich, worin das Problem liegt, falls die Sitemap tatsächlich als text/xml ausgeliefert wird.

                          Tschö, Auge

                          --
                          „Habe ich mir das nur eingebildet, oder kann der kleine Hund wirklich sprechen?“ fragte Schnapper. „Er behauptet, nicht dazu imstande zu sein“ erwiderte Victor. Schnapper zögerte (…) „Nun …“ sagte er schließlich, „ich schätze, er muss es am besten wissen.“ Terry Prattchett, Voll im Bilde
                          1. Wenn aber, wie Robert und du in dem anderen Fussel dieses Fadens herausgearbeitet habt, text/xml ein Synonym zu application/xml ist, frage ich mich, worin das Problem liegt, falls die Sitemap tatsächlich als text/xml ausgeliefert wird.

                            Dann läge die Ursache des Problems in der empfangenden Software - welche das Synonym oder den Alias nicht kennt und meckert statt zu arbeiten.

                            1. Hallo

                              Wenn aber, wie Robert und du in dem anderen Fussel dieses Fadens herausgearbeitet habt, text/xml ein Synonym zu application/xml ist, frage ich mich, worin das Problem liegt, falls die Sitemap tatsächlich als text/xml ausgeliefert wird.

                              Dann läge die Ursache des Problems in der empfangenden Software - welche das Synonym oder den Alias nicht kennt und meckert statt zu arbeiten.

                              Die empfangende Software ist hier offensichtlich ein Validator. Gerade bei solche einem Programm möchte man davon ausgehen, dass der keinen Stuss meldet.

                              Tschö, Auge

                              --
                              „Habe ich mir das nur eingebildet, oder kann der kleine Hund wirklich sprechen?“ fragte Schnapper. „Er behauptet, nicht dazu imstande zu sein“ erwiderte Victor. Schnapper zögerte (…) „Nun …“ sagte er schließlich, „ich schätze, er muss es am besten wissen.“ Terry Prattchett, Voll im Bilde
                              1. Die empfangende Software ist hier offensichtlich ein Validator.

                                Inzwischen sind mehrere Validatoren bemüht worden.

                                Gerade bei solche einem Programm möchte man davon ausgehen, dass der keinen Stuss meldet.

                                Ja. Möchte.

                                Da man die XML-Datei ja nicht für den Validator baut und sendet stellt sich die Frage ob das hier nicht alles für die Mäusefresserin K. ist - anders gesagt, was sagt denn die bestimmungsgemäße Software?

                                1. Hallo

                                  Da man die XML-Datei ja nicht für den Validator baut und sendet stellt sich die Frage ob das hier nicht alles für die Mäusefresserin K. ist

                                  Da hast du unbedingt recht. In XML wird ja die Erfüllung von Bedingungen zum „funktionieren“ vorausgesetzt, vorausgesetzt, sowohl die Server- als auch die Clientsoftware setzt das sauber um.

                                  • anders gesagt, was sagt denn die bestimmungsgemäße Software?

                                  Frag' mal Google und Anverwandte. 😉

                                  Tschö, Auge

                                  --
                                  „Habe ich mir das nur eingebildet, oder kann der kleine Hund wirklich sprechen?“ fragte Schnapper. „Er behauptet, nicht dazu imstande zu sein“ erwiderte Victor. Schnapper zögerte (…) „Nun …“ sagte er schließlich, „ich schätze, er muss es am besten wissen.“ Terry Prattchett, Voll im Bilde
          2. Habe jetzt in .htaccess eingefügt:

            AddType application/xml .xml

            Trotzdem bleibt es bei text/xml

            Untersuche wie die Datei ausgeliefert wird. Hackt da womöglich ein CMS oder andere Software hinein? Wenn die Datei nicht direkt vom Webserver ausgeliefert wird, kann Software die Header - also auch den Content-Typ setzen.

            Hilfreich wäre es, die .htaccess zu sehen.

            Weiterer Hinweis:

            Womöglich brauchst Du außerdem ein RemoveType

            1. Da mindestens zwei Programme beteiligt sind und mir die Behauptungen von Browsern suspekt erscheinen, empfehle ich die gesendeten Responce-Header auch auf ganz niedrigem Niveau zu prüfen:

              • Versuche mal die Datei mit wget --delete-after -d $URL abzuholen und sieh nach, was also tatsächlich mit den Antwort-Headern gesendet wird.

              • Versuche auch hierbei Proxys, Virenscanner e.t.c. stufenweise zu umgehen, denn auch die können den Content-Type-Header umschreiben.

      2. Moin Rolf,

        .xml sollte aber doch eigentlich von jedem Webserver per Default als application/xml ausgeliefert werden, oder?

        Warum nicht als text/xml?

        Viele Grüße
        Robert

        1. Hallo Robert B.,

          ja, frag ich mich gerade auch. Gerhard hat application/xml erwartet und ich habe nicht lange drüber nachgedacht.

          Ich weiß nicht, wie Linux das handhabt. Ob es überhaupt einen Dateityp als Teil des Verzeichniseintrags kennt. Ob /etc/mime.types die einzige Informationsquelle ist (also letztlich die File Extension)

          Unter Windows wird der MIME-Typ einer Datei vom Webserver aus der Extension abgeleitet. Das ist aber nur was für den Webserver, Windows selbst interessiert sich für die FTYPE-Informationen.

          Mein WIMP-System (Windows + IIS + MariaDB + PHP) liefert jedenfalls für .xml Dateien text/xml aus. Weil das im IIS so eingetragen ist. In der /etc/mime.types vom Wowbagger steht das auch so.

          MDN sagt: „application/xml is recommended as of RFC 7303 (section 4.1), but text/xml is still used sometimes.“

          Rolf

          --
          sumpsi - posui - obstruxi
          1. Moin Rolf,

            Ich weiß nicht, wie Linux das handhabt. Ob es überhaupt einen Dateityp als Teil des Verzeichniseintrags kennt. Ob /etc/mime.types die einzige Informationsquelle ist (also letztlich die File Extension)

            Unter unixoiden Betriebssystemen wird üblicherweise die Magic Number, also die ersten n Bytes einer Datei analysiert und daraus der Inhaltstyp abgeleitet. Für XML ist das mit <?xml relativ einfach.

            macOS legt den Dateityp im Dateisystem ab.

            Unter Windows wird der MIME-Typ einer Datei vom Webserver aus der Extension abgeleitet. Das ist aber nur was für den Webserver, Windows selbst interessiert sich für die FTYPE-Informationen.

            Was ist denn FTYPE? Bis hin zu Windows 11 ändert sich der angezeigte Dateityp mit der Dateinamenserweiterung.

            MDN sagt: „application/xml is recommended as of RFC 7303 (section 4.1), but text/xml is still used sometimes.“

            Interessante Interpretation von RFC7303

            Viele Grüße
            Robert

            1. Hallo Robert,

              This specification standardizes three media types -- application/xml, application/xml-external-parsed-entity, and application/xml-dtd – for use in exchanging network entities that are related to the Extensible Markup Language (XML) while defining text/xml and text/xml-external-parsed-entity as aliases for the respective application/ types.

              Da hat vermutlich jemand „Alias“ als „Veraltet“ interpretiert. Ich nehme an, diese Deutung kommt daher, dass RFC 7303 von sich sagt, er würde RFC 3023 obsoletieren, welcher seinerseits RFC 2376 obsoletiert.

              In den älteren RFCs wurde als Unterschied zwischen den beiden Mimes angegeben, dass Programme, die die /xml-Typen nicht kennen, auf text/xml wie auf text/plain reagieren könnten und auf application/xml wie auf application/octet-stream (d.h. sie machen einen Download).

              RFC7303 erwähnt das so nicht mehr und sagt statt dessen, dass text/xml ein Alias für application/xml sei.

              In dieser Stackoverflow-Frage wird das Thema tiefer behandelt und verlinkt. Das könnte man wikifizieren 😀

              Rolf

              --
              sumpsi - posui - obstruxi
            2. @@Robert B.

              Unter unixoiden Betriebssystemen wird üblicherweise die Magic Number, also die ersten n Bytes einer Datei analysiert und daraus der Inhaltstyp abgeleitet. Für XML ist das mit <?xml relativ einfach.

              Wenn eine XML-Datei denn mit <?xml beginnt, was kein Muss ist.

              Die XML-Deklaration ist optional. [Spec] Wenn man keine braucht (bspw. um eine von UTF-8 abweichende Zeichencodierung anzugeben), kann man sie weglassen.

              Kwakoni Yiquan

              --
              Ad astra per aspera
              1. Hi,

                Wenn eine XML-Datei denn mit <?xml beginnt, was kein Muss ist.

                Die XML-Deklaration ist optional.

                und selbst wenn sie vorhanden ist, muß sie m.W. nicht am Anfang der Datei stehen - zumindest Whitespace ist davor erlaubt (meine ich - ich wühl jetzt nicht in den Specs …).

                cu,
                Andreas a/k/a MudGuard

                1. Die XML-Deklaration ist optional.

                  und selbst wenn sie vorhanden ist, muß sie m.W. nicht am Anfang der Datei stehen - zumindest Whitespace ist davor erlaubt (meine ich - ich wühl jetzt nicht in den Specs …).

                  Naja.

                  Immerhin schreibt das W3C:

                  „Das UTF-8-BOM ermöglicht eine verlässliche Erkennung der Zeichencodierung, denn es ist sehr kurz und solide, funktioniert in XML und HTML“

                  1. Hi,

                    Die XML-Deklaration ist optional.

                    und selbst wenn sie vorhanden ist, muß sie m.W. nicht am Anfang der Datei stehen - zumindest Whitespace ist davor erlaubt (meine ich - ich wühl jetzt nicht in den Specs …).

                    Naja.

                    Immerhin schreibt das W3C:

                    „Das UTF-8-BOM ermöglicht eine verlässliche Erkennung der Zeichencodierung, denn es ist sehr kurz und solide, funktioniert in XML und HTML“

                    und was hat die BOM mit Whitespace vor der XML-Deklaration zu tun?

                    Ich versteh Deinen Einwand nicht wirklich …

                    cu,
                    Andreas a/k/a MudGuard

                    1. Die XML-Deklaration ist optional.

                      und selbst wenn sie vorhanden ist, muß sie m.W. nicht am Anfang der Datei stehen

                      Naja … W3C … BOM …

                      und was hat die BOM mit Whitespace vor der XML-Deklaration zu tun?

                      Genau das „vor der XML-Deklaration“. Um das oder die ersten Bytes in Textdateien „streiten sich viele Kandidaten“. Beispiel: Bei PHP-Includes mit BOM oder whitespaces und nachfolgendem Versuch, Header zu senden, gehts auch mal in die Hose.

                2. @@MudGuard

                  und selbst wenn [die XML-Deklaration] vorhanden ist, muß sie m.W. nicht am Anfang der Datei stehen - zumindest Whitespace ist davor erlaubt (meine ich - ich wühl jetzt nicht in den Specs …).

                  So viel Gewühle ist das nicht. Einfach ab der verlinkten Stelle rückwärts nach „prolog“ suchen führt zu https://www.w3.org/TR/REC-xml/#NT-document

                  [1]   	document	   ::=   	prolog element Misc*
                  

                  Da dann auch in

                  [22]   	prolog	   ::=   	XMLDecl? Misc* (doctypedecl Misc*)?
                  [23]   	XMLDecl	   ::=   	'<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
                  

                  nichts von Whitespace steht, würde ich sagen: die XML-Deklaration muss – wenn vorhanden – ganz am Anfang stehen; kein Whitespace davor erlaubt.

                  Kwakoni Yiquan

                  --
                  Ad astra per aspera
                  1. Hallo Gunnar,

                    die Spec ist da ein bisschen ungenau.

                    Zum einen schreibt sie, dass ein Dokument mit dem Prolog beginnt und erwähnt nichts von Whitespace.

                    Zum anderen schreibt sie, dass ein Dokument eine Entity ist und dass eine in UTF-8 codierte Entity mit einem BOM beginnen darf - nicht muss. Eine in UTF-16 codierte Entity muss hingegen mit einem BOM beginnen (§4.3.3).

                    Das ist dann aber Teil des Encodings und nicht Teil der Entity, insofern ist das BOM nicht in der document Produktion enthalten.

                    Zum XML-Deklaration schrubst Du noch:

                    Wenn man keine braucht (bspw. um eine von UTF-8 abweichende Zeichencodierung anzugeben), kann man sie weglassen.

                    Genauer: um eine von UTF-8 oder UTF-16 abweichende Codierung anzugeben, sofern es keine andere Quelle für diese Information gibt.

                    §4.3.3:

                    Although an XML processor is required to read only entities in the UTF-8 and UTF-16 encodings, it is recognized that other encodings are used around the world, and it may be desired for XML processors to read entities that use them. In the absence of external character encoding information (such as MIME headers), parsed entities which are stored in an encoding other than UTF-8 or UTF-16 must begin with a text declaration (see 4.3.1 The Text Declaration) containing an encoding declaration:

                    und "text declaration" ist '<?xml' VersionInfo? EncodingDecl S? '?>'

                    Ich will jetzt nicht verfechten, dass man die Encoding-Angabe auf Teufelkommraus weglassen sollte. Man weiß ja nie, wann die external character encoding information mal fehlt, deshalb ist es sicherer, sie für Nichtstandardencodings drinzuhaben.

                    Aber vielleicht verstehe ich diesen Textsalat ja auch miss, Specs wollen hypergenau und redundanzfrei sein, mit der Folge, dass sie write-only werden…

                    Als Fazit verstehe ich das so:

                    Ein XML-Dokument in UTF-8

                    • darf ein BOM haben.
                    • darf eine XML-Deklaration haben

                    Ein XML-Dokument in UTF-16

                    • muss ein BOM haben (vermutlich, um die Endianness unterscheiden zu können)
                    • darf eine XML-Deklaration haben

                    Ein XML-Dokument in UTF-32

                    • wird von der XML 1.0 Spec nicht betrachtet. XML 1.1 spricht es zumindest als eine von mehreren Unicode Encodings an
                    • muss eine XML-Deklaration haben (weil es nicht UTF-8 oder UTF-16 ist)
                    • könnte mit einem 32-bit BOM den Parser verwirren, braucht aber eigentlich eins, um die Endianness sicher feststellen zu können. Here be parsons [1]

                    Ein byteweise codiertes XML-Dokument

                    • darf und kann kein BOM haben (weil's sonst UTF oder Binärzeugs wäre)
                    • muss eine XML-Deklaration haben und sollte daher eine auf ASCII basierende Codepage benutzen

                    Ein EBCDIC codiertes XML-Dokument

                    • braucht einen Transcodierer oder einen schlauen XML-Parser, weil <?xml in EBCDIC ganz andere Bytes nutzt als in ASCII.

                    Rolf

                    --
                    sumpsi - posui - obstruxi

                    1. parser dragons ↩︎

  2. Hallo Gerhard,

    für solche Anfragen wäre es wirklich sinnvoll, wenn du mehr Inforationen bereitstellts.

    1. Den Inhalt der XML-Datei
    2. Einen Abzug der Request Headers. Das kannst du ganz einfach im Browser mit dem Inspect Tool erreichen. Zum Beispiel bei Firefox "Inspect" --> "Network". Im Ergebnis dann so etwas hier:

    Alles andere ist doch nur Rätselraten. Anders als bei lokalen Dateien hängt der Mime-Type davon ab, wie der Server den Payload ausliefert, d.h. was in den Headers steht.

    Gruss Michael

  3. Hallo,

    woran können die beiden Server denn den Mime-Type erkennen?

    Hat die Datei passende Header-Zeilen für den Document-Type, oder wird auf dem Empfänger-Server eine MIME-Type-Tiefenprüfung vorgenommen?

    Mit welchem Protokoll wird die Datei hochgeladen?

    Grüße ML 4.0