<?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>benjamin erhart</title>
	<atom:link href="http://benjaminerhart.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://benjaminerhart.com</link>
	<description>web &#38; mobile dev / it sec</description>
	<lastBuildDate>Mon, 21 Jan 2013 21:58:12 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Auch in der zweiten Instanz abgeschmettert</title>
		<link>http://benjaminerhart.com/2013/01/auch-in-der-zweiten-instanz-abgeschmettert/</link>
		<comments>http://benjaminerhart.com/2013/01/auch-in-der-zweiten-instanz-abgeschmettert/#comments</comments>
		<pubDate>Mon, 21 Jan 2013 21:58:12 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Netzpolitik]]></category>
		<category><![CDATA[Kennzeichenscanning]]></category>
		<category><![CDATA[VGH]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=891</guid>
		<description><![CDATA[Am 10.12.2012 war nun endlich die zweite Verhandlung im Berufungsverfahren vor dem bayerischen Verwaltungsgerichtshof. Patrick hat einen Bericht von RA Udo Kauß gepostet. Es war mir eine echte Freude, den Produktmanagertypen von Vitronic, der sich extra die Mühe gemacht hatte vorbeizukommen, mit meinen Fragen zum Schwitzen zu bringen. Überhaupt war es beeindruckend, welchen Aufwand die [...]]]></description>
				<content:encoded><![CDATA[<p>Am 10.12.2012 war nun endlich die <a href="http://www.daten-speicherung.de/index.php/kfz-massenabgleich-der-bayrische-polizei-am-10-12-2012-erneut-vor-gericht/">zweite Verhandlung im Berufungsverfahren</a> vor dem bayerischen Verwaltungsgerichtshof. Patrick hat einen Bericht von RA Udo Kauß <a href="http://www.daten-speicherung.de/index.php/bericht-von-der-mundlichen-verhandlung-uber-den-kfz-massenabgleich/">gepostet</a>.</p>
<p>Es war mir eine echte Freude, den Produktmanagertypen von <a href="http://www.vitronic.de/verkehr/kennzeichenerkennung-akls/">Vitronic</a>, der sich extra die Mühe gemacht hatte vorbeizukommen, mit meinen Fragen zum Schwitzen zu bringen. Überhaupt war es beeindruckend, welchen Aufwand die Gegenseite (also das bayerische Innenministerium) getrieben hatte. Alleine am Verteidigertisch saßen 6 Leute.</p>
<p>Am Ende interessierte das Gericht allerdings doch nur wieder die juristischen Feinheiten. Technische Probleme werden da nach Möglichkeit verdrängt.</p>
<p>Zitat <a href="http://www.daten-speicherung.de/index.php/bericht-von-der-mundlichen-verhandlung-uber-den-kfz-massenabgleich/">Patrick Breyer</a>:<br />
“Der Verwaltungsgerichtshof hat die Berufung mit Urteil vom 17.12.2012 inzwischen leider zurückgewiesen, die Revision zum Bundesverwaltungsgericht jedoch wegen der grundsätzlichen Bedeutung der Streitfragen zugelassen. Die Urteilsbegründung liegt noch nicht vor. Sobald dies der Fall ist, wird über das weitere Vorgehen entschieden.” – besser könnte ichs auch nicht sagen.</p>
<p><a href="http://www.bverwg.de/">Das Bundesverwaltungsgericht ist übrigens in Leipzig</a>.</p>
<p>Vielen Dank an alle bisherigen Unterstützer!</p>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2013/01/auch-in-der-zweiten-instanz-abgeschmettert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2013%2F01%2Fauch-in-der-zweiten-instanz-abgeschmettert%2F&amp;language=de_DE&amp;category=text&amp;title=Auch+in+der+zweiten+Instanz+abgeschmettert&amp;description=Am+10.12.2012+war+nun+endlich+die+zweite+Verhandlung+im+Berufungsverfahren+vor+dem+bayerischen+Verwaltungsgerichtshof.+Patrick+hat+einen+Bericht+von+RA+Udo+Kau%C3%9F+gepostet.+Es+war+mir+eine+echte+Freude%2C+den...&amp;tags=Kennzeichenscanning%2CVGH%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Talk: User Credential Handling in Web Applications done right</title>
		<link>http://benjaminerhart.com/2012/10/user-credential-handling-in-web-applications-done-right/</link>
		<comments>http://benjaminerhart.com/2012/10/user-credential-handling-in-web-applications-done-right/#comments</comments>
		<pubDate>Sun, 21 Oct 2012 10:44:05 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Technik]]></category>
		<category><![CDATA[Credentials Security]]></category>
		<category><![CDATA[Password Security]]></category>
		<category><![CDATA[Web Application Security]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=838</guid>
		<description><![CDATA[Last friday I held a talk on secure password handling in web applications at &#8220;The Next Web&#8221; Barcamp. A good time to try Slideshare! User Credential handling in Web Applications done right from tladesignz]]></description>
				<content:encoded><![CDATA[<p>Last friday I held a talk on secure password handling in web applications at <a href="http://webdevsalzburg.multimediatechnology.at/barcamp-the-next-web-oktober-2012/">&#8220;The Next Web&#8221; Barcamp</a>.<br />
A good time to try Slideshare!</p>
<p><iframe src="http://de.slideshare.net/slideshow/embed_code/14820369?rel=0" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="http://de.slideshare.net/tladesignz/user-credential-handling-in-web-applications-done-right" title="User Credential handling in Web Applications done right" target="_blank">User Credential handling in Web Applications done right</a> </strong> from <strong><a href="http://de.slideshare.net/tladesignz" target="_blank">tladesignz</a></strong> </div>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2012/10/user-credential-handling-in-web-applications-done-right/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2012%2F10%2Fuser-credential-handling-in-web-applications-done-right%2F&amp;language=en_GB&amp;category=text&amp;title=Talk%3A+User+Credential+Handling+in+Web+Applications+done+right&amp;description=Last+friday+I+held+a+talk+on+secure+password+handling+in+web+applications+at+%26%238220%3BThe+Next+Web%26%238221%3B+Barcamp.+A+good+time+to+try+Slideshare%21+User+Credential+handling+in+Web+Applications...&amp;tags=Credentials+Security%2CPassword+Security%2CWeb+Application+Security%2Cblog" type="text/html" />
	</item>
		<item>
		<title>@pechakucha</title>
		<link>http://benjaminerhart.com/2012/02/pechakucha/</link>
		<comments>http://benjaminerhart.com/2012/02/pechakucha/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 12:51:26 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Netzkultur]]></category>
		<category><![CDATA[Blödsinn]]></category>
		<category><![CDATA[Nonsense]]></category>
		<category><![CDATA[Pecha Kucha]]></category>
		<category><![CDATA[Pecha Kucha Salzburg]]></category>
		<category><![CDATA[Winkelbacken]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=632</guid>
		<description><![CDATA[Letztes Jahr durfte ich auf der Pecha Kucha Night Salzburg einen Vortrag halten. Reiner Blödsinn zum Thema &#8220;Winkelbacken&#8221;, aus Spaß an der Freude. Das Format zwingt einen dazu, sich wirklich gut vorzubereiten. Eine sehr spannende Erfahrung. Danke jennycolombo!]]></description>
				<content:encoded><![CDATA[<p>Letztes Jahr durfte ich auf der Pecha Kucha Night Salzburg einen Vortrag halten. Reiner Blödsinn zum Thema &#8220;Winkelbacken&#8221;, aus Spaß an der Freude.</p>
<p>Das Format zwingt einen dazu, sich wirklich gut vorzubereiten. Eine sehr spannende Erfahrung. Danke <a href="http://jennycolombo.com/">jennycolombo</a>!</p>
<p><iframe width="560" height="315" src="http://www.youtube-nocookie.com/embed/8BA7kz3k3lc" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2012/02/pechakucha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2012%2F02%2Fpechakucha%2F&amp;language=de_DE&amp;category=text&amp;title=%40pechakucha&amp;description=Letztes+Jahr+durfte+ich+auf+der+Pecha+Kucha+Night+Salzburg+einen+Vortrag+halten.+Reiner+Bl%C3%B6dsinn+zum+Thema+%26%238220%3BWinkelbacken%26%238221%3B%2C+aus+Spa%C3%9F+an+der+Freude.+Das+Format+zwingt+einen+dazu%2C+sich+wirklich...&amp;tags=Bl%C3%B6dsinn%2CNonsense%2CPecha+Kucha%2CPecha+Kucha+Salzburg%2CWinkelbacken%2Cblog" type="text/html" />
	</item>
		<item>
		<title>HTML5 Webcam Panorama Viewer</title>
		<link>http://benjaminerhart.com/2012/02/html5-webcam-panorama-viewer/</link>
		<comments>http://benjaminerhart.com/2012/02/html5-webcam-panorama-viewer/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 15:41:43 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Technik]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mobile Web App]]></category>
		<category><![CDATA[Panorama]]></category>
		<category><![CDATA[Web App]]></category>
		<category><![CDATA[Webcam]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=623</guid>
		<description><![CDATA[Finally my customer ncm released their HTML5 webcam panorama viewer for Hotel Goldener Berg, which, I&#8217;m proud to say, is mostly my work! Check it out with your desktop browser, your smartphone and your tablet. It even degrades gracefully to Internet Explorer 8, though no zooming is possible there.]]></description>
				<content:encoded><![CDATA[<p>Finally my customer <a href="http://www.ncm.at/">ncm</a> released their HTML5 webcam panorama viewer for <a href="http://www.goldenerberg.at/">Hotel Goldener Berg</a>, which, I&#8217;m proud to say, is mostly my work!</p>
<p><a href="http://www.goldenerberg.at/webcam-lech-am-arlberg/"><img src="http://benjaminerhart.com/wp-content/uploads/2012/02/panorama-app.jpg" alt="" title="panorama-app" width="180" height="102" class="aligncenter size-full wp-image-624" /></a></p>
<p>Check it out with your desktop browser, your smartphone and your tablet. It even degrades gracefully to Internet Explorer 8, though no zooming is possible there.</p>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2012/02/html5-webcam-panorama-viewer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2012%2F02%2Fhtml5-webcam-panorama-viewer%2F&amp;language=en_GB&amp;category=text&amp;title=HTML5+Webcam+Panorama+Viewer&amp;description=Finally+my+customer+ncm+released+their+HTML5+webcam+panorama+viewer+for+Hotel+Goldener+Berg%2C+which%2C+I%26%238217%3Bm+proud+to+say%2C+is+mostly+my+work%21+Check+it+out+with+your+desktop+browser%2C...&amp;tags=HTML5%2CMobile+Web+App%2CPanorama%2CWeb+App%2CWebcam%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Reverse Proxy with Mojolicious</title>
		<link>http://benjaminerhart.com/2012/01/reverse-proxy-with-mojolicious/</link>
		<comments>http://benjaminerhart.com/2012/01/reverse-proxy-with-mojolicious/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 22:56:34 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Technik]]></category>
		<category><![CDATA[Charset Guessing]]></category>
		<category><![CDATA[Mojolicious]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Reverse Proxy]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=597</guid>
		<description><![CDATA[During the last month I was working on a project for a customer, who wanted a reverse proxy, so he could modify his web pages before delivery. This posed a very interesting problem which I chose to solve with good old Perl. Why Perl? Because it&#8217;s the absolute right thing to use, when you want [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://benjaminerhart.com/wp-content/uploads/2012/01/mojolicious.png"><img src="http://benjaminerhart.com/wp-content/uploads/2012/01/mojolicious.png" alt="" title="mojolicious" width="206" height="60" class="alignright size-full wp-image-608" /></a>During the last month I was working on a project for a customer, who wanted a reverse proxy, so he could modify his web pages before delivery.</p>
<p>This posed a very interesting problem which I chose to solve with good old Perl.<br />
Why Perl? Because it&#8217;s the absolute right thing to use, when you want to manipulate text!</p>
<p>It&#8217;s very fast, very stable, easy on resources and Perl has everything to build a proxy without using any additional software like Apache, Nginx, Squid or the like.</p>
<h2>Mojolicious to the Rescue</h2>
<p>It gets even easier, when you have an amazing framework like <a href="http://mojolicio.us/">Mojolicious</a>, which I stumbled upon a few months ago!<br />
<span id="more-597"></span><br />
It calls itself &#8220;A next generation web framework for the Perl programming language&#8221;. It has <strong>no</strong> (I repeat that: <strong>NO!</strong>) mandatory module dependencies, features a full HTTP 1.1 web server (even non-blocking if you like) and also a HTML5/XML client complete with a DOM parser using CSS3 syntax jQuery style for accessing elements.</p>
<p>Additionally, it has a preforking non-blocking I/O server featuring hot deployment called &#8220;<a href="http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad">Hypnotoad</a>&#8220;. And a heck of a lot more jokes in the source code comments taken from Futurama.</p>
<p>One of it&#8217;s primary goals is to bring back fun into coding web in Perl. And boy, did I have!</p>
<h3>no Moose</h3>
<p>Mojolicious has a great base class called <a href="http://search.cpan.org/~sri/Mojolicious-2.43/lib/Mojo/Base.pm">Mojo::Base</a>. It has all the syntactic sugar one wants, provides all the good switches (warnings/strict etc.), a default constructor and a &#8216;has&#8217; accessor creator. Good riddance, <a href="http://moose.iinteractive.com/">Moose</a>, you always bugged me with your weight!</p>
<p>So everything was there for this little project already. I just had to put the bricks together. And smooth it went!</p>
<p>The whole project took <em>under 10 man-days</em> to finish!</p>
<h2>Lessons Learned</h2>
<h3>Configuration Files</h3>
<p>One always needs configuration files, at least to store the database credentials somewhere. This application was no different.</p>
<p>When using <a href="http://www.catalystframework.org/">Catalyst</a>, it has a configuration file by default, which can be in any format one could possibly think of, thanks to <a href="http://search.cpan.org/~bricas/Config-Any-0.23/lib/Config/Any.pm">Config::Any</a>.<br />
Mojolicious doesn&#8217;t bring configuration files by default, one has to build its own code for it. At first I built a class using <a href="http://search.cpan.org/~ingy/YAML-0.78/lib/YAML/Any.pm">YAML::Any</a>, because I like <a href="http://www.yaml.org/">YAML</a> for configuration files very much.</p>
<p>But when working with Mojolicious for a while, one&#8217;s mindset changes: Why introduce this absolutely unneccessary dependency? Well, with Catalyst, one more to the hundreds doesn&#8217;t hurt. But Mojolicious is different: Why not use the provided <a href="http://mojolicio.us/perldoc/Mojo/JSON">Mojo::JSON</a> instead?</p>
<p>So I quickly put together a class, which reads the configuration from a <a href="http://json.org/">JSON</a> file. While it&#8217;s not that flexible as YAML, JSON works well enough for the task. Absolute plus: No extra dependency introduced. Smooth.</p>
<h3>Charset Guessing</h3>
<p>While the DOM parser <a href="http://mojolicio.us/perldoc/Mojo/DOM">Mojo::DOM</a> is very complete, I missed one thing, which is automatic charset guessing. Mojo tries to leave it&#8217;s fingers off the encoding as good as possible, so it&#8217;s easy to just proxy a file unmodified, but if you want to modify the content, you should make sure you know the encoding, so you&#8217;re not messing it up.</p>
<p>While it&#8217;s not a problem to build one&#8217;s own charset guesser, I nevertheless would like to see it in the Framework, because that&#8217;s where I think it belongs. (If it&#8217;s there already, please put my nose on it, because I couldn&#8217;t find it!)</p>
<p>I built the following guesser, which was purely by instinct and is most probably improvable:</p>
<pre>sub guess_charset {
    my ($self, $content_type, $body) = @_;

    # Avoid undef warnings
    $content_type ||= '';
    $body ||= '';

    # HTTP Content-Type header
    if ($content_type =~ /charset=(.*)$/i) {
        return $1;
    }

    # XML prolog
    if ($body =~ /&lt;\?xml .*encoding="(\S*?)".*\?&gt;/si) {
        return $1;
    }

    my $dom = Mojo::DOM-&gt;new( $body );

    # &lt;meta http-equiv="content-type"&gt;
    my $meta = $dom-&gt;at( 'meta[content*="charset"]' );

    if ($meta &amp;&amp; $meta-&gt;attrs( 'content' ) =~ /charset=(.*)$/i) {
        return $1;
    }

    # HTML5 &lt;meta charset=""&gt;
    $meta = $dom-&gt;at( 'meta[charset]' );
    if ($meta) {
        return $meta-&gt;attrs( 'charset' );
    }

    return;
}</pre>
<h3>Database Access</h3>
<p>I came to love <a href="http://search.cpan.org/~arodland/DBIx-Class-0.08196/lib/DBIx/Class.pm">DBIx::Class</a> as an <a href="https://en.wikipedia.org/wiki/Object-Relational_Mapping">ORM</a> for database access. You need some patience to get acquainted with it, but then its great to work with, because it&#8217;s so complete. No comparison to the poor excuse of an ORM called <a href="http://guides.rubyonrails.org/active_record_querying.html">ActiveRecords</a> used in Rails.</p>
<p>The downside is, again, it introduces so many dependencies, you make your customer cry when trying to deploy your application.</p>
<p>Since my customers were no Perl guys, using DBC was out of the question. Instead I wrote a small model class for DB access, which allows named pre-prepared statements and polishes all the rough edges off <a href="http://search.cpan.org/~timb/DBI-1.616/DBI.pm">DBI</a>.</p>
<p>I hate having raw SQL statements between program code, because I so often see how it leads to bad style, SQL injections and inefficient database access. Therefore I put the statements in the config file and pre-prepare them on model construction. I know, there are issues with this, but I mind these. Promised.</p>
<p>I&#8217;ve done stuff like this so many times, and it seems goofy, to reinvent the wheel once again, but somehow, there are so many ways to talk with your database that nobody seems to be able to agree on some standards between a full fledged ORM and the absolute lowest level.</p>
<p>Anyway, the one issue I had with Mojolicious in this regard is this:</p>
<p>The Hypnotoad server does preforking which destroys all database connections done on startup, so one needs to connect only after forking.</p>
<p>I came across <a href="https://github.com/kraih/mojo/wiki/Hypnotoad-prefork-web-server">this wiki page</a> where it is explained, and I at first opted for the <a href="http://search.cpan.org/~dwheeler/DBIx-Connector-0.47/lib/DBIx/Connector.pm">DBIx::Connector</a> solution, which doesn&#8217;t introduce too much dependencies and sounds like the fire-and-forget solution to all database connection problems.</p>
<p>Somehow, it did solve the problem, but we observed another issue: the connections dropped after some hours of operations, preferably after having some hours of traffic and then some without any.</p>
<p>So I got rid of the DBIx::Connector again and now handle dropped connections manually in the model class. Ironically far more stable and another dependency saved!</p>
<h3>Static Routes</h3>
<p>When doing a reverse proxy, <a href="http://search.cpan.org/~sri/Mojolicious-2.43/lib/Mojolicious/Static.pm">Mojolicious::Static</a> gets in your way. The nice it is to have some default output, so you have something to start from, you definitely don&#8217;t want to get served up the default Mojolicious favicon.</p>
<p>To get around this, I had to build a custom static file serving class, which actually does: nothing.</p>
<pre>package Proxy::NoStatic;
use Mojo::Base 'Mojolicious::Static';

sub dispatch {}

1;</pre>
<p>A little tedious and maybe this could be achieved simpler. However, this was the fastest I came up with.</p>
<h2>Bottom Line</h2>
<p><a href="http://mojolicio.us/">Mojolicious</a> is by far the best framework for server side web development I came across in a long time. And I saw some: <a href="http://www.springsource.org/">Spring 3</a>, <a href="http://rubyonrails.org/">Rails</a>, <a href="http://catalystframework.org/">Catalyst</a>, <a href="http://cakephp.org/">CakePHP</a>, <a href="http://www.yiiframework.com/">Yii</a>, <a href="http://fuelphp.com/">FuelPHP</a>, <a href="http://framework.zend.com/">Zend</a>, <a href="http://codeigniter.com/">CodeIgniter</a> and not to mention the various home made ones I had the &#8220;pleasure&#8221; to work with&#8230;</p>
<p>I so much enjoyed it and I can&#8217;t wait for the next project to use it!</p>
<p>Thank you <a href="http://posterous.com/users/5BceKDO6LdLz#activities/page/1">Sebastian Riedel</a> for giving it to us!<br />
And, btw., Sebastian: Mission accomplished! <img src='http://benjaminerhart.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2012/01/reverse-proxy-with-mojolicious/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2012%2F01%2Freverse-proxy-with-mojolicious%2F&amp;language=de_DE&amp;category=text&amp;title=Reverse+Proxy+with+Mojolicious&amp;description=During+the+last+month+I+was+working+on+a+project+for+a+customer%2C+who+wanted+a+reverse+proxy%2C+so+he+could+modify+his+web+pages+before+delivery.+This+posed+a...&amp;tags=Charset+Guessing%2CMojolicious%2CPerl%2CProxy%2CReverse+Proxy%2Cblog" type="text/html" />
	</item>
		<item>
		<title>RIPE63 &#8211; on the way back home</title>
		<link>http://benjaminerhart.com/2011/11/ripe63-on-the-way-back-home/</link>
		<comments>http://benjaminerhart.com/2011/11/ripe63-on-the-way-back-home/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 20:25:02 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Netzpolitik]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[RIPE63]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=591</guid>
		<description><![CDATA[All presentations of the conference are listed here. This is mine. The conference is very interesting, it almost seems like a family gathering, (well, a very big family &#8211; over 350 participants), accordingly the atmosphere is very friendly, also to newcomers. I was way overdressed with my suit, almost everybody was in shirts and jeans. [...]]]></description>
				<content:encoded><![CDATA[<p>All presentations of the conference <a href="http://ripe63.ripe.net/presentations/presentation-archive/">are listed here</a>. <a href="http://ripe63.ripe.net/presentations/187-RIPE_IPv6_Privacy.odp">This is mine.</a></p>
<p>The conference is very interesting, it almost seems like a family gathering, (well, a very big family &#8211; over 350 participants), accordingly the atmosphere is very friendly, also to newcomers. I was way overdressed with my suit, almost everybody was in shirts and jeans. While I mention that &#8211; the givaway goodies are great, I got a longsleeve shirt, a magnetic IPv6 address sticker and a pocket ruler! <img src='http://benjaminerhart.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  (There was even more, but I didn&#8217;t want to look too greedy&#8230;)</p>
<p>I definitely can recommend participating at a RIPE conference! If you can, stay the whole 5 days and definitely join the evening events. RIPE goes a long way to make it an enjoyable event for everybody!</p>
<p>Unfortunately my talk was the last one today, so I couldn&#8217;t speek with too many people afterwards, nevertheless, the conversations I had, were very intersting.</p>
<p>At the talk itself, and the discussion afterwards, I had a hard time transporting our issues on IPv6 privacy just right, unfortunately a not-so-small part of the tech community has the attitude that you can&#8217;t solve political issues with technical measures. My reply to that is: protocols, software, configuration <strong>is</strong> politics. Unfortunately this clear cut way of saying it didn&#8217;t come to my mind at the right moment.</p>
<p>Additionally I recognized once again, that the privacy discussion in german speaking countries is way ahead of many others, in some people&#8217;s view I was yet another german again concerned with privacy. <img src='http://benjaminerhart.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>Some people afterwards told me, that a moderator was missing, and I definitely can confirm that.</p>
<p>On balance, it can&#8217;t say it was a success, but it wasn&#8217;t unsuccessful neather. I could drop our concerns there and I got a chance for a replay: One attendee wants to help me push the topic further in the community.</p>
<p>I hopefully get a chance then to clarify and crispen our concerns and arguments!</p>
<p>BTW: I learned that the <a href="http://www.bsi.de/">BSI</a> promotes the same goals as the AK Vorrat does!</p>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2011/11/ripe63-on-the-way-back-home/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2011%2F11%2Fripe63-on-the-way-back-home%2F&amp;language=en_GB&amp;category=text&amp;title=RIPE63+%26%238211%3B+on+the+way+back+home&amp;description=All+presentations+of+the+conference+are+listed+here.+This+is+mine.+The+conference+is+very+interesting%2C+it+almost+seems+like+a+family+gathering%2C+%28well%2C+a+very+big+family+%26%238211%3B+over...&amp;tags=IPv6%2CPrivacy%2CRIPE63%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Meet me at RIPE63</title>
		<link>http://benjaminerhart.com/2011/10/meet-me-at-ripe63/</link>
		<comments>http://benjaminerhart.com/2011/10/meet-me-at-ripe63/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 15:54:26 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Netzpolitik]]></category>
		<category><![CDATA[AK Vorrat]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[RIPE]]></category>
		<category><![CDATA[RIPE63]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=586</guid>
		<description><![CDATA[I&#8217;m pleased to announce that on November, 3rd I am invited to hold a BoF Session at the RIPE 63 conference taking place in Viennas Hilton am Stadtpark. I&#8217;m there for the german AK Vorrat to represent our view on privacy issues regarding IPv6. I will be there the whole day and am happy to [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m pleased to announce that on November, 3rd I am invited to hold a <a href="http://en.wikipedia.org/wiki/Birds_of_a_Feather_%28computing%29">BoF</a> <a href="http://ripe63.ripe.net/programme/meeting-plan/bof/">Session</a> at the <a href="http://ripe63.ripe.net/">RIPE 63</a> conference taking place in Viennas Hilton am Stadtpark.</p>
<p>I&#8217;m there for the german <a href="http://www.vorratsdatenspeicherung.de/">AK Vorrat</a> to represent our view on <a href="https://wiki.vorratsdatenspeicherung.de/IPv6">privacy issues regarding IPv6</a>.</p>
<p>I will be there the whole day and am happy to talk to you, too! <a title="Über mich" href="/ueber-mich/">Contact me</a>, if you want to meet!</p>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2011/10/meet-me-at-ripe63/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2011%2F10%2Fmeet-me-at-ripe63%2F&amp;language=en_GB&amp;category=text&amp;title=Meet+me+at+RIPE63&amp;description=I%26%238217%3Bm+pleased+to+announce+that+on+November%2C+3rd+I+am+invited+to+hold+a+BoF+Session+at+the+RIPE+63+conference+taking+place+in+Viennas+Hilton+am+Stadtpark.+I%26%238217%3Bm+there...&amp;tags=AK+Vorrat%2CIPv6%2CPrivacy%2CRIPE%2CRIPE63%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Kennzeichenscanning, Teil 2, Folge 1</title>
		<link>http://benjaminerhart.com/2011/10/kennzeichenscanning-teil-2-folge-1/</link>
		<comments>http://benjaminerhart.com/2011/10/kennzeichenscanning-teil-2-folge-1/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 09:42:48 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Netzpolitik]]></category>
		<category><![CDATA[Gerichtsverhandlung]]></category>
		<category><![CDATA[Kennzeichenscanning]]></category>
		<category><![CDATA[VGH]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=576</guid>
		<description><![CDATA[Letzten Montag, 17. Oktober 2011, war die Verhandlung meiner Klage vor dem bayerischen Verwaltungsgerichtshof in München, nun schon in zweiter Instanz. Zuerst einmal: Vielen Dank an alle Spender, die das möglich gemacht haben! Das mediale Interesse im Vorfeld war eher moderat, inzwischen fängt die Sache aber an, zu fliegen. Die Abendzeitung München berichtete gestern über [...]]]></description>
				<content:encoded><![CDATA[<p>Letzten Montag, 17. Oktober 2011, war die Verhandlung meiner Klage vor dem bayerischen Verwaltungsgerichtshof in München, nun schon in zweiter Instanz.</p>
<p>Zuerst einmal: <strong>Vielen Dank an alle <a title="Kennzeichenscanning" href="/kennzeichenscanning/">Spender</a>, die das möglich gemacht haben!</strong></p>
<p>Das mediale Interesse im Vorfeld war eher moderat, inzwischen fängt die Sache aber an, zu fliegen. Die <a href="http://www.abendzeitung-muenchen.de/inhalt.big-brother-in-bayern-polizei-scannt-millionen-kennzeichen-pendler-klagt.7c76c9f4-07a2-43fd-9270-0e695f1acb04.html">Abendzeitung München berichtete gestern</a> über die Aktion, und prompt steht das Fernsehen auf der Matte.</p>
<p>Vermutlich ist der Wirbel um den <a href="http://ccc.de/de/updates/2011/staatstrojaner">Staatstrojaner</a> für die erhöhte Aufmerksamkeit nicht ganz unschuldig.</p>
<p>Noch ist aber nichts im Kasten, deshalb möchte ich noch nicht zu viel verraten.</p>
<p>Jetzt erst einmal ein paar</p>
<h1>Fakten aus der Verhandlung</h1>
<p><span id="more-576"></span><br />
Das Gericht hat diese erst einmal vertagt. Erst einige Tage vor der Verhandlung ging uns und dem Innenministerium ein 32-teiliger Fragenkatalog des Senats zu dem Thema zu, in dem das Innenministerium bzw. die Polizei recht detailiert zu dem ganzen Sachverhalt Sstellung nehmen muß.</p>
<p>Selbst in dem 4,5h Verhandlungsmarathon konnte nicht alles umfassend geklärt werden, trotz 4 anwesender Mitarbeiter der Polizei und des Ministeriums plus Anwältin.</p>
<p>Wir warten also auf deren schriftliche Stellungnahme, für die sie 6 Wochen Zeit haben, anschließend haben wir nochmal 2 Monate Zeit für eine Antwort, danach will der Senat evtl. eine weitere mündliche Verhandlung ansetzen, u.U. mit dem <a title="Datenschutz Bayern" href="http://www.datenschutz-bayern.de/">bayerischen Datenschutzbeauftragten Thomas Petri</a>.</p>
<p>Bei den Fragen des Senats mußten die Beamten doch deutlich weiter die Hosen herunterlassen, als sie es gerne getan hätten, das überhebliche Lächeln aus der ersten Verhandlung 2009 war dementsprechend nicht mehr in den Gesichtern zu erkennen.</p>
<p>Soweit, den Staatsbeamten eine aktuelle Liste der Standorte der Erfassungsgeräte abzunötigen, ging das Gericht nun allerdings leider doch nicht.</p>
<p>Ich fasse hier mal meine</p>
<h1>Erkenntnisse über die Erfassungsgeräte</h1>
<p>zusammen:</p>
<p>Es gibt momentan 25 AKEs (Automatische Kennzeichen Erkennungssysteme) oder auch AKLS (Automatische Kennzeichen Lese Systeme), davon sind 3 mobile Geräte.<br />
Höchstvermutlich sind alle Systeme von der Firma <a href="http://www.vitronic.de/verkehr/kennzeichenerkennung-akls/">Vitronic</a> aus Wiesbaden.</p>
<p>Die mobilen Geräte sehen in etwa aus, wie ein normales Geschwindigkeitsmessgerät (Blitzgerät), können zwei Fahrspuren auf einmal überwachen und wurden im letzten Jahr zweimal eingesetzt. (Wir konnten ein Photo davon sehen.)</p>
<p>Die restlichen 22 Anlagen sind fest montiert, einige von denen waren früher auch mobil und stammen offenbar aus dem früheren Pilotprojekt an den Grenzübergängen, das aufgrund fehlender nötiger Gesetze eingestellt wurde.</p>
<p>Auch die ex-mobilen Geräte überwachen zwei Spuren, die original festen jeweils nur eine, deshalb ergeben sich folgende Zahlen: Es gibt 22 fest installierte AKEs, die 30 Fahrspuren auf 12 Standorten überwachen.</p>
<p>Die fest installierten Anlagen laufen 24/7 durch, sie nehmen die Fahrzeuge von hinten auf und sind auf bayerischen Autobahnen und einer Europastraße auf Schilderbrücken montiert.</p>
<p>Die Erkennung wird durch eine Laserschranke ausgelöst. Die AKEs arbeiten mit einem Videobild im Infrarotbereich, das verstärkt wird durch einen Infrarotblitz, der entsprechend für menschliche Augen nicht sichtbar ist.</p>
<p>Wir konnten ein solches Bild sehen, es ist schwarz/weiß, hat einen sehr hohen Kontrast, das Kennzeichen ist, v.a. auch bedingt durch die Reflexfolierung vieler Kennzeichentafeln recht deutlich zu erkennen, Rückleuchten kann man erkennen, den Rest des Fahrzeugs dagegen kaum.</p>
<p>Am Fahrbahnrand stehen &#8220;Betonkästen&#8221; die einen Rechner enthalten, auf dem eine Datenbank läuft, die sämtliche aktuell zur Fahndung ausgeschriebenen Kennzeichen enthält. Gegen diese Datenbank wird ein erkanntes Kennzeichen abgeglichen, und wenn ein vermutlicher &#8220;Treffer&#8221; vorhanden ist (Treffer ist nicht gleich Treffer, dazu später mehr), dort eingetragen und an die Verkehrsleitstelle übermittelt. Bei den mobilen Anlagen wird das stattdessen auf einem Laptop im Einsatzfahrzeug gemacht.</p>
<p>Der Rechner am Fahrbahnrand wird regelmäßig aktualisiert, mit einem Extrakt aus <a href="http://de.wikipedia.org/wiki/INPOL-neu">INPOL</a> und <a href="http://de.wikipedia.org/wiki/Schengener_Informationssystem">SIS</a>, allerdings ohne die Fahndungen nach dem Pflichtversicherungsgesetz.</p>
<p>Alle, die Ihre KfZ Versicherung nicht bezahlt haben, können also aufatmen. <img src='http://benjaminerhart.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Laut Aussagen der Ministerialbeamten enthält dieser Extrakt nur die Kennzeichen, keine weiteren Daten wie z.B. Fahndungsgrund.</p>
<p>Die Datenanbdingung ist teilweise kabelgebunden, teilweise via UMTS.</p>
<p><em>Fußballfans aufgepasst!</em> Bei besonderen Anlässen können zusätzliche Fahndungsdaten eingespielt werden, insbesondere der Begriff &#8220;Datei Gewalttäter Sport&#8221; fiel in diesem Zusammenhang. Wobei zeitnah die aktuellen Zulassungsnummern der Fahrzeuge der Delinquenten ermittelt werden.</p>
<p><em>Globalisierungsgegnern</em> dürfte vermutlich eine ähnliche Behandlung zuteil werden.</p>
<p>Nachdem das Ministerium in letzter Zeit mehrere parlamentarische Anfragen zu statistischen Daten bekommen hat, wurde die Software im Juli um eine statistische Zählung erweitert. Aus den Monaten Juli, August und September 2011 ergeben sich demnach folgende Zahlen:</p>
<ul>
<li>8 Mio. überprüfte Fahrzeuge pro Monat</li>
<li>40.000 &#8211; 50.000 vom System vermutete Treffer / Monat</li>
<li>500 &#8211; 600 <em>echte</em> Treffer / Monat</li>
<li>30 &#8211; 35 sichergestellte Fahrzeuge / Monat</li>
</ul>
<h1>Treffer nicht gleich Treffer</h1>
<p>Da das Erkennungssystem keinerlei Semantik kennt, also ausländische von inländischen Nummern nicht unterscheiden kann und ebenso durch das SIS mit Fahndungen vieler verschiedener Länder abgeglichen wird, ergeben sich vergleichsweise viele falsche Treffer (&#8220;False Positives&#8221;).</p>
<p>Die Beamten in der Leitstelle haben dementsprechend viel zu tun, zu überprüfen, ob es nun wirklich ein echter Treffer ist.</p>
<p>Mehr zum Ablauf in der Leitstelle und zur verwendeten Software dann bald im nächsten Artikel!</p>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2011/10/kennzeichenscanning-teil-2-folge-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2011%2F10%2Fkennzeichenscanning-teil-2-folge-1%2F&amp;language=de_DE&amp;category=text&amp;title=Kennzeichenscanning%2C+Teil+2%2C+Folge+1&amp;description=Letzten+Montag%2C+17.+Oktober+2011%2C+war+die+Verhandlung+meiner+Klage+vor+dem+bayerischen+Verwaltungsgerichtshof+in+M%C3%BCnchen%2C+nun+schon+in+zweiter+Instanz.+Zuerst+einmal%3A+Vielen+Dank+an+alle+Spender%2C+die+das...&amp;tags=Gerichtsverhandlung%2CKennzeichenscanning%2CVGH%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Kennzeichenscanning, 2. Runde</title>
		<link>http://benjaminerhart.com/2011/10/kennzeichenscanning-2-runde/</link>
		<comments>http://benjaminerhart.com/2011/10/kennzeichenscanning-2-runde/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 06:48:26 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Netzpolitik]]></category>
		<category><![CDATA[Gerichtsverhandlung]]></category>
		<category><![CDATA[Kennzeichenscanning]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=569</guid>
		<description><![CDATA[Lange hat es gedauert, aber nun ist es soweit: Am Montag, 17.10.2011 um 14 Uhr findet das Berufungsverfahren vor dem bayerischen Verwaltungsgerichtshof statt. RA Dr. Udo Kauß aus Freiburg wird mich vertreten. Er hat schon mehrere Prozesse zu diesem Thema begleitet. Vielen Dank an dieser Stelle noch einmal für die Spenden, die dieses Verfahren möglich [...]]]></description>
				<content:encoded><![CDATA[<p>Lange hat es gedauert, aber nun ist es soweit:</p>
<p>Am Montag, 17.10.2011 um 14 Uhr findet das Berufungsverfahren vor dem bayerischen Verwaltungsgerichtshof statt.</p>
<p>RA Dr. Udo Kauß aus Freiburg wird mich vertreten. Er hat <a href="http://www.sueddeutsche.de/thema/Udo_Kau%C3%9F">schon mehrere Prozesse zu diesem Thema</a> begleitet.</p>
<p>Vielen Dank an dieser Stelle noch einmal für die <a href="/kennzeichenscanning/">Spenden</a>, die dieses Verfahren möglich machen!</p>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2011/10/kennzeichenscanning-2-runde/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2011%2F10%2Fkennzeichenscanning-2-runde%2F&amp;language=de_DE&amp;category=text&amp;title=Kennzeichenscanning%2C+2.+Runde&amp;description=Lange+hat+es+gedauert%2C+aber+nun+ist+es+soweit%3A+Am+Montag%2C+17.10.2011+um+14+Uhr+findet+das+Berufungsverfahren+vor+dem+bayerischen+Verwaltungsgerichtshof+statt.+RA+Dr.+Udo+Kau%C3%9F+aus+Freiburg+wird...&amp;tags=Gerichtsverhandlung%2CKennzeichenscanning%2Cblog" type="text/html" />
	</item>
		<item>
		<title>HTTP Caching Einmaleins</title>
		<link>http://benjaminerhart.com/2011/02/http-caching-einmaleins/</link>
		<comments>http://benjaminerhart.com/2011/02/http-caching-einmaleins/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 00:28:37 +0000</pubDate>
		<dc:creator>tla</dc:creator>
				<category><![CDATA[Technik]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[Page Speed]]></category>
		<category><![CDATA[YSlow]]></category>

		<guid isPermaLink="false">http://benjaminerhart.com/?p=550</guid>
		<description><![CDATA[Letzte Woche mußte ich in einem Kundensystem das Caching optimieren. Damit dieses Wissen nicht wieder verloren geht, habe ich dabei gleich mal die wichtigsten Grundlagen hier zusammengetragen. Die wichtigsten Tools Firebug, Netzwerk Tab -&#62; zeigt Ladezeiten und Cache Hits Firbug Add-Ons machen Performance Analyse und geben viele gute Hinweise: Yahoo&#8217;s YSlow (Erläuterungen) Google&#8217;s Page Speed [...]]]></description>
				<content:encoded><![CDATA[<p>Letzte Woche mußte ich in einem Kundensystem das Caching optimieren. Damit dieses Wissen nicht wieder verloren geht, habe ich dabei gleich mal die wichtigsten Grundlagen hier zusammengetragen.</p>
<h2>Die wichtigsten Tools</h2>
<ul>
<li><a href="http://getfirebug.com/network">Firebug, Netzwerk Tab</a> -&gt; zeigt Ladezeiten und Cache Hits</li>
<li>Firbug Add-Ons machen Performance Analyse und geben viele gute Hinweise:
<ul>
<li><a href="http://developer.yahoo.com/yslow/">Yahoo&#8217;s YSlow</a> (<a href="http://developer.yahoo.com/performance/rules.html">Erläuterungen</a>)</li>
<li><a href="http://code.google.com/intl/de/speed/page-speed/">Google&#8217;s Page Speed</a> (<a href="http://code.google.com/intl/de/speed/page-speed/docs/caching.html">Erläuterungen</a>)</li>
</ul>
</li>
</ul>
<h2>Die relevanten HTTP Header</h2>
<p><span id="more-550"></span><br />
Quelle: <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">HTTP/1.1 Header Field Definition</a></p>
<h3>Expires</h3>
<ul>
<li>Erklärt Ablaufdatum der Resource</li>
<li>Browser macht keinen Request mehr vor Ablauf dieses Datums</li>
</ul>
<h3>Cache-Control</h3>
<ul>
<li><em>public</em>: Aktiviert Proxy Caching und Caching im Firefox bei SSL Verschlüsselung</li>
<li><em>no-cache</em>: Deaktiviert Caching</li>
<li><em>no-store</em>: Keinerlei Speicherung, noch härter als &#8220;no-cache&#8221; (gedacht für Backups etc&#8230;)</li>
<li><em>max-age</em>: Ablaufzeit in Sekunden, redundant zu Expires</li>
<li><em>must-revalidate</em>: Immer Server fragen, ob Resource abgelaufen ist</li>
<li>(es gibt weitere, die vor allem für Proxies relevant sind)</li>
</ul>
<h3>Last-Modified</h3>
<ul>
<li>Erklärt letztes Änderungsdatum</li>
<li>Browser schickt einen <strong>If-Modified-Since</strong> Header beim nächsten Request</li>
<li>Server kann ein <em>403 Not Modified</em> zurückschicken, Browser nutzt Caching Daten</li>
</ul>
<h3>ETag</h3>
<ul>
<li>&#8220;Entity Tag&#8221;</li>
<li>Ist eindeutige ID bzw. Hash einer Resource</li>
<li>Apache verwendet z.B. dafür Last-Modified-Timestamp, Dateigröße und iNode ID, kann aber beliebig gewählt werden</li>
<li>Browser schickt einen <strong>If-None-Match</strong> Header beim nächsten Request</li>
<li>Server kann ein <em>403 Not Modified</em> zurückschicken, Browser nutzt Caching Daten</li>
</ul>
<h2>Erkenntnisse</h2>
<ul>
<li><strong>Expires</strong> und <strong>Cache-Control: max-age</strong> sind gut, um Anzahl der Requests zu drücken</li>
<li><strong>Last-Modified</strong> und <strong>ETag</strong> sind gut, um die Datenmenge zu reduzieren</li>
<li><strong>Expires</strong> und <strong>Cache-Control: max-age</strong> sind redundant, besser nur eins von beiden verwenden
<ul>
<li>Weniger HTTP Overhead</li>
</ul>
</li>
<li><strong>Last-Modified</strong> und <strong>ETag</strong> sind redundant, besser nur eins von beiden
<ul>
<li>Weniger HTTP Overhead</li>
<li>Wenn beides verwendet wird, muß auch beides geprüft werden!</li>
</ul>
</li>
<li>Optimales Caching: Resource muß nur ein einziges Mal geladen werden, dann keine weiteren Requests mehr
<ul>
<li><strong>Expires</strong> in Jahr in die Zukunft setzen</li>
<li>Wenn sich Resource ändert, URL ändern (z.B. mit Versionsnummer oder Hash)</li>
<li>Das geht nur, wenn das gesamte System (die Webapplikation) darauf ausgelegt ist!</li>
</ul>
</li>
</ul>
<h2>Diskussion</h2>
<p><strong>ETags</strong> sind in Applikationen etwas leichter zu handhaben als <strong>Last-Modified</strong> Timestamps, da ein einfacher Stringvergleich ausreicht. Timestamps müssen erst umständlich in <a href="http://de.wikipedia.org/wiki/Unixzeit">UNIX Epochen</a> umgewandelt und verglichen werden, bzw. durch aufwändige <a href="http://search.cpan.org/~drolsky/DateTime-0.66/lib/DateTime.pm">Klassen</a> gejagt werden.</p>
<p>Dabei sind sie flexibler zu handhaben &#8211; Ein ETag kann aus irgendwelchen Daten bestehen, nötigenfalls aus der Summe mehrerer Metadaten mehrerer Elemente.</p>
<p>Für einfache Szenarios (z.B. Bilder, die von der Applikation serviert werden) reicht als Seed für den ETag ironischerweise meist ein Timestamp einer Datei. Mehrere Seeds erhöhen den I/O oft unnötig, können jedoch im Zweifelsfall jederzeit leicht hinzugefügt werden.</p>
<p>Empfehlung von YSlow und Page Speed ist, immer ein <strong>Expires</strong> und/oder ein <strong>Cache-Control</strong> zu senden. Bei Resourcen, die sich jederzeit ändern <em>könnten</em>, fühlt sich das allerdings relativ nutzlos an. Der Selbstversuch bestätigt das erwartete Standardverhalten der Browser, immer beim Server nachzufragen, solange der Server nicht explizit ein <strong>Expires</strong> gesetzt hat. Von <a href="http://code.google.com/intl/de/speed/page-speed/docs/caching.html">öminösen Heuristiken</a> war nichts zu bemerken. Insofern verbrauchen diese Header bei derartigen Resourcen erst einmal nur Bandbreite.</p>
<p>Dennoch bin ich natürlich an guten Gründen interessiert, Expires und/oder Cache-Control bei Resourcen mit unbekanntem Ablaufdatum einzusetzen!</p>
]]></content:encoded>
			<wfw:commentRss>http://benjaminerhart.com/2011/02/http-caching-einmaleins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=28393&amp;popout=1&amp;url=http%3A%2F%2Fbenjaminerhart.com%2F2011%2F02%2Fhttp-caching-einmaleins%2F&amp;language=de_DE&amp;category=text&amp;title=HTTP+Caching+Einmaleins&amp;description=Letzte+Woche+mu%C3%9Fte+ich+in+einem+Kundensystem+das+Caching+optimieren.+Damit+dieses+Wissen+nicht+wieder+verloren+geht%2C+habe+ich+dabei+gleich+mal+die+wichtigsten+Grundlagen+hier+zusammengetragen.+Die+wichtigsten+Tools...&amp;tags=Cache%2CCaching%2CFirebug%2Chttp%2CPage+Speed%2CYSlow%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>
