trunx: mehrere Dateien

Hallo Forum,

ich möchte mich eigentlich nur noch mal rückversichern.

Wenn man sich eine Webseite im Browsr ansieht, dann läuft das doch so, der Browser fordert per http-Request z.B. die html-Datei an, wertet diese aus und erkennt z.B. dass noch weitere Dateien zu holen sind, z.B. css, oder javascript, diverse Bilder. Dann erzeugt er doch für jede dieser Dateien einen eigenen Request und setzt dann das ganze zusammen. Richtig?

Oder kann man mit einem Request auch mehrere Dateien anfordern?

bye trunx

--
Die Standard-Antwort: "Bitte benutze die Forum-Suche!" macht die Forum-Suche kaputt, weil die Suche dann nämlich genau vor allem diese dämliche Standard-Antwort, also Müll liefert. Sinnvoller ist stattdessen folgende Standard-Antwort: "Dieses Thema wurde schon vielfach im Forum besprochen, siehe z.B. <a>hier</a> oder <a>da</a> oder benutze die Forum-Suche z.B. mit den Stichworten 'Stichwort1 Stichwort2'." Danke.
  1. Hallo,

    Wenn man sich eine Webseite im Browsr ansieht, dann läuft das doch so, der Browser fordert per http-Request z.B. die html-Datei an, wertet diese aus und erkennt z.B. dass noch weitere Dateien zu holen sind, z.B. css, oder javascript, diverse Bilder. Dann erzeugt er doch für jede dieser Dateien einen eigenen Request und setzt dann das ganze zusammen. Richtig?

    richtig.

    Oder kann man mit einem Request auch mehrere Dateien anfordern?

    Nein. Abgesehen davon, dass HTTP keine Dateien kennt, sondern nur Ressourcen. Die können mit einer Datei auf dem Server korrelieren, müssen aber nicht.

    Ciao,
     Martin

    --
    Ich verdanke meinen Eltern so viel - besonders meiner Mutter und meinem Vater.
      (Dakota Fanning, US-Nachwuchsschauspielerin)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. ok, danke :)

      btw: wenn jetzt eine solche Datei als Ressource angefordert wird und ich schaue mir an, was da so kommt, also den Header beginnend mit
      "HTTP/1.1 200 ..." dann eine Leerzeile, dann die Daten, dann sehe ich zusätzlich zu den Daten eingeschoben immer wieder neue Zeilen, die z.B. "174a" enthalten und dann geht es mit den Daten weiter. Wieso wird der Datenkörper auf diese Weise unterbrochen, und vor allem, wie kann man das wieder entfernen?
      Das brachte mich auf die Frage, ob vllt mehrere Dateien angefordert werden könnten, weil ich dachte, dass das vllt Datenpakete sind...

      bye trunx

      --
      Die Standard-Antwort: "Bitte benutze die Forum-Suche!" macht die Forum-Suche kaputt, weil die Suche dann nämlich genau vor allem diese dämliche Standard-Antwort, also Müll liefert. Sinnvoller ist stattdessen folgende Standard-Antwort: "Dieses Thema wurde schon vielfach im Forum besprochen, siehe z.B. <a>hier</a> oder <a>da</a> oder benutze die Forum-Suche z.B. mit den Stichworten 'Stichwort1 Stichwort2'." Danke.
      1. Hallo,

        btw: wenn jetzt eine solche Datei als Ressource angefordert wird und ich schaue mir an, was da so kommt, also den Header beginnend mit
        "HTTP/1.1 200 ..." dann eine Leerzeile, dann die Daten, dann sehe ich zusätzlich zu den Daten eingeschoben immer wieder neue Zeilen, die z.B. "174a" enthalten und dann geht es mit den Daten weiter. Wieso wird der Datenkörper auf diese Weise unterbrochen, und vor allem, wie kann man das wieder entfernen?

        das ist ein Feature von HTTP/1.1, da kann der Datenblock, der ja (fast) unendlich groß sein könnte, in kleine Häppchen, sogenannte Chunks, zerlegt werden. Den genauen Mechanismus habe ich auch noch nicht verstanden (habe mich auch noch nicht damit befasst), aber in HTTP/1.0 gab's das noch nicht.

        Das brachte mich auf die Frage, ob vllt mehrere Dateien angefordert werden könnten, weil ich dachte, dass das vllt Datenpakete sind...

        Das sind sie schon, aber sie gehören eben alle zu *einer* Anfrage. Und bei HTTP gilt immer noch das Prinzip: Ein Request, ein Response.

        Natürlich kann der Client die empfangenen Daten analysieren und nach einem ihm bekannten Schema mehrere Dateien daraus extrahieren. Das ist dann aber schon anwendungsspezifisch, und hat nichts mit HTTP zu tun.

        Ciao,
         Martin

        --
        Wer mit dem Finger droht, sollte ihn am Abzug haben, und nicht in der Nase.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. ah, ok, recht vielen Dank :)

          --
          Die Standard-Antwort: "Bitte benutze die Forum-Suche!" macht die Forum-Suche kaputt, weil die Suche dann nämlich genau vor allem diese dämliche Standard-Antwort, also Müll liefert. Sinnvoller ist stattdessen folgende Standard-Antwort: "Dieses Thema wurde schon vielfach im Forum besprochen, siehe z.B. <a>hier</a> oder <a>da</a> oder benutze die Forum-Suche z.B. mit den Stichworten 'Stichwort1 Stichwort2'." Danke.
          1. ah, ok, recht vielen Dank :)

            Hallo,
            offenbar habe ich mich zu früh bedankt, chunks sind ja echt anstrengend... in php gibt es die Funktion http_chunked_encode(), nur leider scheint sie nicht unbedingt zum Standard-Repertoire von webservern zu gehören, sprich ich muss mir was schreiben, um die chunks wieder zusammen zu fassen. Hat jemand von euch damit Erfahrung? Und vllt sogar nen code-Schnipsel ^^ ?

            vielen Dank
            bye trunx

            --
            Die Standard-Antwort: "Bitte benutze die Forum-Suche!" macht die Forum-Suche kaputt, weil die Suche dann nämlich genau vor allem diese dämliche Standard-Antwort, also Müll liefert. Sinnvoller ist stattdessen folgende Standard-Antwort: "Dieses Thema wurde schon vielfach im Forum besprochen, siehe z.B. <a>hier</a> oder <a>da</a> oder benutze die Forum-Suche z.B. mit den Stichworten 'Stichwort1 Stichwort2'." Danke.
            1. Tach,

              offenbar habe ich mich zu früh bedankt, chunks sind ja echt anstrengend... in php gibt es die Funktion http_chunked_encode(), nur leider scheint sie nicht unbedingt zum Standard-Repertoire von webservern zu gehören, sprich ich muss mir was schreiben, um die chunks wieder zusammen zu fassen. Hat jemand von euch damit Erfahrung? Und vllt sogar nen code-Schnipsel ^^ ?

              warum implementierst du überhaupt einen HTTP-Client? Im Zweifelsfall: sprich halt nur HTTP 1.0, das ist deutlich einfacher und Chunk-frei.

              mfg
              Woodfighter

              1. Hallo,

                ... Im Zweifelsfall: sprich halt nur HTTP 1.0, das ist deutlich einfacher und Chunk-frei.

                ich hab mir das mit den chunks nun mal genauer angetan, ist tatsächlich nicht so schwer. Aber es ist, jedenfalls für meine Zwecke noch einfacher HTTP 1.0 zu benutzen, danke für den Tipp :)
                (tatsächlich antwortet der Server auch brav mit 1.0 ...)

                warum implementierst du überhaupt einen HTTP-Client?

                der Hintergrund ist relativ einfach, ich habe Daten in einer Datenbank, auf die ich aber nur lokal zu greifen kann (mein Provider verwehrt mir den remote-Zugriff), möchte aber die Daten für verschiedene Anwendungen die auch auf verschiedenen Servern laufen, nutzen. Da ich aber die Daten nicht 5x in verschiedene lokale Datenbanken einpflegen will, habe ich mir diese Art der Datenbank-Abfrage selbst gebaut. Funktioniert jetzt einwandfrei ...

                bye trunx

                --
                Die Standard-Antwort: "Bitte benutze die Forum-Suche!" macht die Forum-Suche kaputt, weil die Suche dann nämlich genau vor allem diese dämliche Standard-Antwort, also Müll liefert. Sinnvoller ist stattdessen folgende Standard-Antwort: "Dieses Thema wurde schon vielfach im Forum besprochen, siehe z.B. <a>hier</a> oder <a>da</a> oder benutze die Forum-Suche z.B. mit den Stichworten 'Stichwort1 Stichwort2'." Danke.
            2. Tach!

              offenbar habe ich mich zu früh bedankt, chunks sind ja echt anstrengend...

              Einerseits kannst du HTTP 1.0 verwenden, andererseits ist nicht gesagt, dass der Server nicht doch HTTP 1.1 zurücksendet, auch wenn du einen 1.0-er Request gesendet hast. Zudem sind Chunks nun so schwer auch wieder nicht.

              in php gibt es die Funktion http_chunked_encode(), nur leider scheint sie nicht unbedingt zum Standard-Repertoire von webservern zu gehören

              Richtig, sie steckt in einer PECL-Extension, und diese gehören aus dem einen oder anderen Grund nicht zum Standard-PHP. Aber schlag doch mal die Handbuchseite dazu auf, bei vielen nicht oder erst in den neuesten PHP-Versionen enthaltenen Funktionen steht ein Äquivalent in PHP-Code in den User-Kommentaren - so auch bei dieser.

              dedlfix.

  2. مرحبا

    Oder kann man mit einem Request auch mehrere Dateien anfordern?

    Das geht mit sogenannten Sprites. Javascripte und CSS kannst du ergänzend dazu noch minifizieren.

    mfg

  3. Tach!

    Wenn man sich eine Webseite im Browsr ansieht, dann läuft das doch so, der Browser fordert per http-Request z.B. die html-Datei an, wertet diese aus und erkennt z.B. dass noch weitere Dateien zu holen sind, z.B. css, oder javascript, diverse Bilder. Dann erzeugt er doch für jede dieser Dateien einen eigenen Request und setzt dann das ganze zusammen. Richtig?

    Ja, bei HTTP ist das so. Der Client muss zuerst die Dokumente auswerten, um zu sehen, was er noch zum Seitenaufbau benötigt. Da kommen dann Verzögerungen zustande, weil ohne das erste nicht das zweite geladen werden kann. Unter anderen deswegen hat Google SPDY entwickelt, was ein Ersatz/Erweiterung für HTTP ist. Damit kann der Server schon von sich aus den Client auf bestimmte Ressourcen hinweisen (Server Hint).

    Oder kann man mit einem Request auch mehrere Dateien anfordern?

    In früheren Versionen von HTTP wurde ein Request-Response-Paar in jeweils einer eigenen TCP-Verbindung übertragen. Mittlerweile kann die TCP-Verbindung offen bleiben und mehrere Requests-Responses nacheinander abgearbeitet werden. Allerdings verzögert solch eine Serialisierung den Ladeprozess, besonders wenn es stockt und alle anderen Requests warten müssen. Deswegen werden Requests auch parallel in eigenen TCP-Verbindungen gestartet. Und wieder versucht es SPDY hier besser zu machen, indem es die Requests innerhalb einer SPDY-Verbindung parallelisiert.

    dedlfix.

  4. Oder kann man mit einem Request auch mehrere Dateien anfordern?

    Nein. Googles SPDY (ein Ersatz oder Erweiterung des HTTP-Protokolls) soll das Problem mildern(!), in dem die Requests parallel abgearbeitet werden. Aus Performance-Gründen macht es also Sinn, die Zahl der abzuholenden Ressourcen pro Webseite einzuschränken. Wie das mit Bildern (besonders Icons!) geht haben andere schon dargestellt, aber auch eine überbordende Anzahl an CSS-Ressourcen und JS-Ressourcen kann kontraproduktiv wirken. Es ist manchmal tatsächlich besser weniger selektiv vorzugehen und das CSS sowie die Javascripte nicht je nach Bedarf aus zig Dateien zusammenzustückeln.