<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ROAE-Blog &#187; http</title>
	<atom:link href="http://blog.root-of-all-evil.com/tag/http/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.root-of-all-evil.com</link>
	<description>Studium, Codeing und Gedachtes</description>
	<lastBuildDate>Mon, 30 Jan 2012 22:58:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mac OS X zur Webentwicklung nutzen: Schnell und einfach Apache, PHP, MySql und SVN einrichten.</title>
		<link>http://blog.root-of-all-evil.com/2010/08/mac-os-x-zur-webentwicklung-nutzen-schnell-und-einfach-apache-php-mysql-und-svn-einrichten/</link>
		<comments>http://blog.root-of-all-evil.com/2010/08/mac-os-x-zur-webentwicklung-nutzen-schnell-und-einfach-apache-php-mysql-und-svn-einrichten/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 10:20:06 +0000</pubDate>
		<dc:creator>Philipp</dc:creator>
				<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Erklärungen]]></category>
		<category><![CDATA[Guides]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[entwickler]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=826</guid>
		<description><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/08/mac-os-x-zur-webentwicklung-nutzen-schnell-und-einfach-apache-php-mysql-und-svn-einrichten/" title="Mac OS X zur Webentwicklung nutzen: Schnell und einfach Apache, PHP, MySql und SVN einrichten."></a>Unter Mac OS X entwickeln macht Spaß. Und das eigenen System einzurichten geht erstaunlich schnell, da Mac OS X bereits mit einem Apache 2.2 Webserver, PHP 5 und auch mit einem SVN Server ausgeliefert wird. Wie diese unkompliziert eingerichtet werden &#8230;<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/08/mac-os-x-zur-webentwicklung-nutzen-schnell-und-einfach-apache-php-mysql-und-svn-einrichten/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/08/mac-os-x-zur-webentwicklung-nutzen-schnell-und-einfach-apache-php-mysql-und-svn-einrichten/" title="Mac OS X zur Webentwicklung nutzen: Schnell und einfach Apache, PHP, MySql und SVN einrichten."></a><p>Unter Mac OS X entwickeln macht Spaß. Und das eigenen System einzurichten geht erstaunlich schnell, da Mac OS X bereits mit einem Apache 2.2 Webserver, PHP 5 und auch mit einem SVN Server ausgeliefert wird. Wie diese unkompliziert eingerichtet werden können soll hier gezeigt werden.</p>
<p><span id="more-826"></span></p>
<h2>Apache Webserver unter Mac OS X starten</h2>
<p><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/08/Bildschirmfoto-2010-08-28-um-19.03.55.png" rel="lightbox[826]"><img class="alignright size-thumbnail wp-image-828" title="Bildschirmfoto 2010-08-28 um 19.03.55" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/08/Bildschirmfoto-2010-08-28-um-19.03.55-150x125.png" alt="" width="150" height="125" /></a>Den Apache Webserver zu starten geht erstaunlich einfach. Dazu kann entweder unter <em>Systemeinstellungen</em> &gt; <em>Freigaben</em> die so genannte Webfreigabe aktiviert werden. Ich empfehle, den Apache Server auf diesem Wege zu starten. Natürlich kann man im Terminal kann auch folgenden Befehl eingegeben, doch fehlt dann der entsprechende visuelle Status unter Systemeinstellungen.</p>
<pre>sudo httpd -k start</pre>
<p>Das so genannte htdocs Verzeichnis (das Verzeichnis, dass von außen über den Apache 2 Server angesprochen wird) findet sich standardmäßig unter <em>/Library/Webserver/Documents</em>.</p>
<h2>PHP 5 unter Mac OS X einrichten</h2>
<p><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/08/Bildschirmfoto-2010-08-28-um-19.37.08.png" rel="lightbox[826]"><img class="alignright size-thumbnail wp-image-833" title="Bildschirmfoto 2010-08-28 um 19.37.08" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/08/Bildschirmfoto-2010-08-28-um-19.37.08-150x89.png" alt="" width="150" height="89" /></a>Wer mit PHP 5 entwickeln möchte, der muss das entsprechende Apache Modul zunächst aktivieren. Dazu muss die <em>httpd.conf</em> Datei editiert werden. Sie findet sich unter <em>/etc/apache2</em>. Um auf die Systemverzeichnisse wie beispielsweise etc oder usr über den Finder zuzugreifen wählt man im Menu des Finders <em>Gehe zu</em> &gt; <em>Gehe zu Ordner</em>. Alternativ kann natürlich auch über das Terminal und cd Befehlen zu den entsprechenden Verzeichnissen navigiert werden.</p>
<p>In der <em>httpd.conf</em> Datei muss die Zeile 116</p>
<pre>LoadModule php5_module        libexec/apache2/libphp5.so</pre>
<p>entkommentiert werden. Wer möchte kann in Zeile 215 einstellen, dass .htaccess Dateien Parameter ändern können. Das ist für die reibungslose Funktion von mod_rewrite notwendig.</p>
<pre>&lt;Directory /Library/WebServer/Documents&gt;
  AllowOverride All
&lt;/Directory&gt;</pre>
<p>In Zeile 230 muss hinzugefügt werden, dass auch index.php Dateien als Directory Indexes erkannt werden:</p>
<pre>&lt;IfModule dir_module&gt;
  DirectoryIndex index.html index.php
&lt;/IfModule&gt;</pre>
<p>Zu guter letzt muss der Webserver neu gestartet werden. Dies kann über die Systemeinstellungen (siehe oben) oder mit folgendem Befehl geschehen:</p>
<pre>sudo httpd -k restart</pre>
<p>Um zu testen, ob PHP läuft kann eine index.php und folgendem Inhalt im htdocs Verzeichnis abgelegt werden. Mit http://localhost/index.php im Browser sollte eine Übersicht über das installierte PHP Modul erscheinen.</p>
<pre>&lt;?php phpinfo(); ?&gt;</pre>
<p>Um Default-Eigenschaften zu überschreiben (error reporting, max upload etc.) muss eine <em>php.ini</em> Datei unter <em>/etc/</em> angelegt werden. Meine php.ini enthält das Folgende:</p>
<pre>max_execution_time = 60
memory_limit = 256M
display_errors = On
post_max_size = 32M
upload_max_filesize = 32M
date.timezone = Europe/Berlin</pre>
<h2>MySQL unter Mac OS X einrichten</h2>
<p>Einen MySQL-Server unter Mac OS X einzurichten geht denkbar einfach. Hierfür gibt es fertige Installer, die über <a href="http://dev.mysql.com/downloads/mysql/" target="_blank">http://dev.mysql.com/downloads/mysql/</a> bezogen werden können. Zusätzlich kommt das MySQL Package mit einem Startup-Item. Wird es installiert, so startet MySQL bei jeden Systemstart automatisch. Installiert wird mysql unter <em>/usr/local/mysql</em>. Um MySQL manuell zu starten genügt folgender Befehl:</p>
<pre>sudo mysqld_safe</pre>
<p>Um einen unkomplizierten Umgang mit MySQL zu gewährleisten empfehle ich, das <em>/usr/local/mysql/bin</em> Verzeichnis zur $PATH hinzuzufügen. Tut man dies nicht, wird der mysql Befehl im Terminal nicht gefunden. Diese drei Schritte helfen:</p>
<p>1. Eine neue Datei <em>/etc/paths.d/mysql</em> erzeugen:</p>
<pre>sudo touch /etc/paths.d/mysql</pre>
<p>2. Die Datei bearbeiten und das MySQL bin Verzeichnis erstellen:</p>
<pre>sudo vim /etc/paths.d/mysql</pre>
<p>3. Den  MySQL-bin Pfad einfügen und speichern.</p>
<pre>/usr/local/mysql/bin</pre>
<p>Wer mit vim noch nicht gearbeitet hat:<em> i</em> drücken um in die Datei zu schreiben, den Pfad eingeben, <em>ESC</em> drücken und dann <em>:wq</em> eingeben und mit <em>Enter</em> bestätigen. Nach einem Neustart sind alle im <em>/usr/local/mysql/bin</em> Verzeichnis befindenden Programme auffindbar.</p>
<p>Achtung: Anfangs besitzt der MySQL root Account kein Passwort! Zur einfachen Verwaltung empfehle ich <a href="http://www.phpmyadmin.net/home_page/downloads.php" target="_blank">phpmyadmin</a> &#8211; ein WebGUI.</p>
<h2>Einen SVN Server unter Mac OS X einrichten</h2>
<p>SVN wird bereits mit Mac OS X ausgeliefert. Damit der SVN Server auch von außen ansprechbar ist muss in erster Linie der Apache Webserver konfiguriert werden. Ich verwalte meine SVN Repositories im Ordner <em>/usr/local/svn/</em>. Um die Repositories von außen ansprechbar zu machen muss eine Datei namens <em>svn.conf</em> im Ordner <em>/etc/apache2</em>/other angelegt werden. Sie besitzt folgenden Inhalt:</p>
<pre>LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so
&lt;Location /svn&gt;
  DAV svn
  SVNParentPath /usr/local/svn
&lt;/Location&gt;</pre>
<p>Nachdem Apache neu gestartet wurde sind die Repositories in <em>/usr/local/svn/</em> unter <em>http://localhost/svn</em> ansprechbar. Beim Anlegen eines neuen Repositories namens foo mit</p>
<pre>sudo svnadmin create /usr/local/svn/foo</pre>
<p>Muss darauf geachtet werden, dass Apache und das SVN Modul auch darauf zugreifen können. Dazu ändern wir zuvor den Besitzer der Dateien in www um:</p>
<pre>sudo chown -R www:www /usr/local/svn</pre>
<p>Damit ist SVN bereits fertig eingerichtet. Ich empfehle die Absicherung des SVN Verzeichnisses. Dazu muss zunächst eine htpasswd Datei erzeugt werden:</p>
<pre>htpasswd -cm /etc/apache2/svn.auth benutzername</pre>
<p>Die svn.conf Datei muss um folgendes erweitert werden:</p>
<pre>LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so
&lt;Location /svn&gt;
  DAV svn
  SVNParentPath /usr/local/svn
  AuthType Basic
  AuthName "Subversion Login"
  AuthUserFile /etc/apache2/svn.auth
  Require valid-user
&lt;/Location&gt;</pre>
<p>Die Repositories sind jetzt unter http://localhost/svn erreichbar. Zur einfachen Verwaltung empfehle ich <a href="http://www.websvn.info/download/" target="_blank">WebSVN</a> &#8211; ein WebGUI.</p>
<p><strong>Update:</strong> Sollte der Apache Server mit der obigen svn Konfiguration nicht mehr starten, muss darauf geachtet werden, dass die Apache Module <em>mod_dav.so</em> und <em>mod_dav_fs.so</em> auch geladen werden. Danke an Alexander für diesen Tip.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/08/mac-os-x-zur-webentwicklung-nutzen-schnell-und-einfach-apache-php-mysql-und-svn-einrichten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>fsockopen statt file_get_contents für HTTP-Requests</title>
		<link>http://blog.root-of-all-evil.com/2010/04/fsockopen-statt-file_get_contents-fur-http-requests/</link>
		<comments>http://blog.root-of-all-evil.com/2010/04/fsockopen-statt-file_get_contents-fur-http-requests/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 13:00:05 +0000</pubDate>
		<dc:creator>Felix</dc:creator>
				<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Erklärungen]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[post]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=737</guid>
		<description><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/04/fsockopen-statt-file_get_contents-fur-http-requests/" title="fsockopen statt file_get_contents für HTTP-Requests"></a>Bei zahlreichen Webspace-Providern ist die Funktionalität von file_get_contents für http deaktiviert. Es treten dann Fehlermeldungen wie Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in [..] und Warning: file_get_contents([..]) [function.file-get-contents]: failed to open stream: no suitable wrapper &#8230;<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/04/fsockopen-statt-file_get_contents-fur-http-requests/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/04/fsockopen-statt-file_get_contents-fur-http-requests/" title="fsockopen statt file_get_contents für HTTP-Requests"></a><p>Bei zahlreichen Webspace-Providern ist die Funktionalität von file_get_contents für http deaktiviert. Es treten dann Fehlermeldungen wie</p>
<p><em>Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in [..] </em>und<em></em></p>
<p><em>Warning: file_get_contents([..]) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in [..]</em></p>
<p>auf. Mit folgender Funktion kann man das Verhalten von file_get_contents jedoch emulieren.</p>
<p><span id="more-737"></span></p>
<p>Die Funktion <em>get_contents_by_uri</em> benutzt <em>fsockopen </em>um Inhalte zu laden:</p>
<pre class="php" title="code">/**
 * Gets contents of any webside by an URI.
 * @author http://blog.root-of-all-evil.com
 * @param String $uri
 */
function get_contents_by_uri($uri) {
	$uriElem = parse_url ( $uri );
	$fp = @fsockopen ( $uriElem ['host'], 80, $errno, $errstr, 10 );

	if (! $fp) {
		throw new Exception ( "Could not create socket: '" . $errnstr . "' (" . $errno . ")." );
	}

	$request = "GET " . $uriElem ['path'] . (isset ( $uriElem ['query'] ) ? "?" . $uriElem ['query'] : "") . " HTTP/1.1\r\n";
	$request .= "Host: " . $uriElem ['host'] . "\r\n";
	$request .= "Connection: Close\r\n\r\n";

	fwrite ( $fp, $request );
	$response = "";
	while ( ! feof ( $fp ) ) {
		$response .= fgets ( $fp, 128 );
	}
	fclose ( $fp );

	// split headers from data
	$responseSplit = explode ( "\r\n\r\n", $response, 2 );

	return $responseSplit [1];
}</pre>
<h1>Erklärung</h1>
<p><strong>Socket erstellen</strong></p>
<p>Die übergebene URI wird über die PHP-Funktion<em> parse_url</em> in ihre Teilmengen zerlegt. Anschließend wird ein Socket erstellt für den entsprechenden Host, auf Port 80 mit einem Timeout von 10 Sekunden. Fehlermeldungen unterdrücken wir durch das <em>@</em>, da wir explizit nach Erfolg abfragen und ggf. eine Ausnahme werfen.</p>
<p><strong>Anfrage schicken, Antwort lesen</strong></p>
<p>Danach wird über <em>fwrite </em>eine entsprechende GET-Anfrage geschickt, welche auch &#8211; falls vorhanden &#8211; die Parameter der URI und nicht nur den Pfad beachtet. Die darauffolgende Antwort wird in die Variable <em>response </em>gelesen.</p>
<p><strong>Antwort bearbeiten und zurückgeben</strong></p>
<p>Da diese neben dem eigentlichen Inhalt auch den Antwortheader enthält wird die Funktion <em>explode </em>benutzt um den Inhalt davon abzuschneiden. Durch den dritten Parameter bei <em>explode </em>mit dem Wert 2, stellen wir sicher, dass nur einmalig an Hand einer Leerzeile getrennt wird wie Sie sich zwischen Antwort-Header und HTML-Code befindet und nicht mehrmals, da natürlich auch Leerzeilen im HTML-Code selbst auftreten können.</p>
<p>Das zweite Element von <em>responseSplit </em>wird zurückgegeben, <em>responseSplit[0]</em> würde entsprechend den Antwort-Header liefern.</p>
<h1>Beispielaufrufe</h1>
<p>Der einfachste Aufruf:</p>
<pre class="php" title="code">echo get_contents_by_uri ( 'http://www.google.de/' );</pre>
<p>Aufruf mit Parametern:</p>
<pre class="php" title="code">echo get_contents_by_uri ( 'http://www.google.de/search?hl=de&amp;site=&amp;q=test' );</pre>
<p>Aufruf mit Ausnahmebehandlung:</p>
<pre class="php" title="code">try{
    echo get_contents_by_uri ( 'http://does_not_exist_.com/bogus.html' );
}
catch(Exception $e)
{
    echo "get_contents_by_uri: ".$e-&gt;getMessage();
}</pre>
<p>Weitere Links:</p>
<ul>
<li><a href="http://de2.php.net/parse_url">PHP &#8211; Funktion parse_url</a></li>
<li><a href="http://de2.php.net/fsockopen">PHP &#8211; Funktion file_get_contens</a></li>
<li><a href="http://de2.php.net/fsockopen">PHP &#8211; Funktion fsockopen</a></li>
<li><a href="http://de2.php.net/manual/en/function.explode.php">PHP &#8211; Funktion explode</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/04/fsockopen-statt-file_get_contents-fur-http-requests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Serverseitig den Webseitenaufbau mit DNS CNAMES und mehr parallele HTTP-Verbindungen beschleunigen</title>
		<link>http://blog.root-of-all-evil.com/2010/02/serverseitig-den-webseitenaufbau-mit-dns-cnames-und-mehr-parallele-http-verbindungen-beschleunigen/</link>
		<comments>http://blog.root-of-all-evil.com/2010/02/serverseitig-den-webseitenaufbau-mit-dns-cnames-und-mehr-parallele-http-verbindungen-beschleunigen/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 13:44:43 +0000</pubDate>
		<dc:creator>Philipp</dc:creator>
				<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Guides]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[beschleunigen]]></category>
		<category><![CDATA[bilder]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[cnames]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[media]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=380</guid>
		<description><![CDATA[Man stelle sich folgendes Szenario vor: Es existiert eine Webseite, die eine Vielzahl von Grafiken, die auf dem gleichem Server hinterlegt sind, einbindet. Diese Webseite wird erfahrungsgemäß eine überdurchschnittlich lange Ladezeit haben. Aber nicht nur aufgrund der zu übertragenen Datenmengen, sondern auch aufgrund der maximalen Anzahl von Verbindungen, die ein Browser auf ein und denselben Server erlaubt. Hier werde ich etwas über die Beschleunigung vom Aufbau von Webseiten schreiben. Dabei verwende ich gewisse DNS Einstellungen, so genannte CNAME-Records mit denen ich serverseitig mehrere parallele HTTP-Verbindungen erlauben kann und so das Laden der Webseite durch den Browser des Nutzers beschleunige.<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/02/serverseitig-den-webseitenaufbau-mit-dns-cnames-und-mehr-parallele-http-verbindungen-beschleunigen/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/02/serverseitig-den-webseitenaufbau-mit-dns-cnames-und-mehr-parallele-http-verbindungen-beschleunigen/" title="Serverseitig den Webseitenaufbau mit DNS CNAMES und mehr parallele HTTP-Verbindungen beschleunigen"></a><p>Man stelle sich folgendes Szenario vor: Es existiert eine Webseite, die eine Vielzahl von Grafiken, die auf dem gleichem Server hinterlegt sind, einbindet. Diese Webseite wird erfahrungsgemäß eine überdurchschnittlich lange Ladezeit haben. Aber nicht nur aufgrund der zu übertragenen Datenmengen, sondern auch aufgrund der maximalen Anzahl von Verbindungen, die ein Browser auf ein und denselben Server erlaubt. Hier werde ich etwas über die Beschleunigung vom Aufbau von Webseiten schreiben. Dabei verwende ich gewisse DNS Einstellungen, so genannte CNAME-Records mit denen ich serverseitig mehrere parallele HTTP-Verbindungen erlauben kann und so das Laden der Webseite durch den Browser des Nutzers beschleunige.<br />
<span id="more-380"></span></p>
<p>Standardmäßig sind moderne Browser mit maximalen Anzahl von <a href="http://stevesouders.com/ua/report.php?v=top&amp;nosparse=1" target="_blank">sechs Verbindungen (IE 6 und IE 7 maximal zwei Verbindungen)</a> zu ein und demselben Host begrenzt. Das führt dazu, dass das Laden von Dateien (Bilder, HTML-Seiten, JavaScripts oder Stylesheets) von einer Webseite in Blöcken unterteilt wird. Dabei würde es um einiges schneller gehen können, wenn ich die zu ladenden Dateien auf verschiedene Hostnamen verteile. So können für jeden Hostnamen mehr Verbindungen gleichzeitig ermöglicht werden.</p>
<p>Man betrachte zum Beispiel Google Maps. Die angezeigte Karte besteht aus einer vielzahl von so genannten Tiles. Tiles sind einfach Kacheln. Jede Kachel stellt einen Kartenausschnitt dar:</p>
<p><img class="aligncenter size-full wp-image-383" title="2009-08-13_1515-526x395" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/02/2009-08-13_1515-526x395.png" alt="" width="526" height="395" /></p>
<p>Damit die Karte schnellstmöglich trotz der Browserbegrenzung von sechs Verbindungen geladen werden kann, verteilt Google Maps die zu ladenden Kacheln auf verschiedene Hostnamen (Subdomains). Google verwendet vier Subdomains: mt0, mt1, mt2 und mt3.google.de:</p>
<p><img class="aligncenter size-full wp-image-384" title="2009-08-13_1520-526x326" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/02/2009-08-13_1520-526x326.png" alt="" width="526" height="326" /></p>
<p>Grundsätzlich ist es kein großes Problem verschiedene Subdomains anzulegen und die Dateien einer Webseite auf diese Subdomains zu verteilen. Allerdings besteht so recht schnell die Gefahr, dass man als Administrator den Überblick verliert, wo welche Dateien abgespeichert sind. Einfacher wäre es, zB. alle Mediendateien (zB. Bilder, Videos) unter einer Subdomain abzuspeichern. Um das Laden der Startseite erheblich zu beschleunigen, aber ohne zahlreiche Subdomains zu arbeiten kann man wie folgt vorgehen:</p>
<ol>
<li> Ich lege unter der Hauptdomain eine einzige subdomain namens  media.domain an. Hier speichere ich alle Bilder ab.</li>
<li>Ich lege so genannte CNAMES Einträge in meinen DNS Einstellungen an.  Ein CNAME ist &#8211; einfach erklärt &#8211; ein Domain-Alias. In meinem Fall  wähle ich zwei CNAME-Einträge namens &#8220;media0.domain.de&#8221; und  &#8220;media1.domain.de&#8221; an. Am einfachsten geht es über die Adminoberfläche  Plesk und sieht folgendermaße aus:<img class="aligncenter size-full wp-image-385" title="2009-08-13_1601" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/02/2009-08-13_1601.png" alt="" width="520" height="209" /></li>
<li>Diese beiden Einträge bewirken, dass media0.domain.de und  media1.domain.de auf die gleiche subdomain media.domain.de umleiten. Ich  habe jetzt also eine Subdomain, die auf drei unterschiedliche Weisen  erreicht werden kann. Der Browser des Nutzers interpretiert die drei  Domains als drei unterschiedliche Adressen, die aber auf den gleichen  Speicherort verweisen. So sind drei mal so viele Verbindungen zum eigentlich  gleichen Host möglich. Der Browser wird einfach ausgetrickst.</li>
<li>Bei der Einbindung der Bilder in die Webseite muss ich jetzt nur die  zwei verschiedenen &#8220;subdomains&#8221; media0 und media1 verteilen. Ich löse  das über einen Zufallsgenerator in meinem PHP Script, dass den HTML-Code  generiert. Dieser könnte zB. so aussehen:</li>
</ol>
<pre class="php" title="code">$media_domains = array('media0', 'media1');
foreach($bilder as $bild) {
  shuffle($media_domains);
  echo('&lt;img src="' . $media_domains[0] . '.domain.tld/img/'. $bild . '" /&gt;');
}</pre>
<p>Und fertig. Kommentare, Verbesserungsvorschlage? Dazu sind die Kommentare da.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/02/serverseitig-den-webseitenaufbau-mit-dns-cnames-und-mehr-parallele-http-verbindungen-beschleunigen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

