<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Revving Filenames: don&#8217;t use querystring</title>
	<atom:link href="http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/</link>
	<description>Essential knowledge for making your web pages faster.</description>
	<lastBuildDate>Sat, 04 Feb 2012 09:46:28 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: EricLaw [MSFT]</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-2898</link>
		<dc:creator>EricLaw [MSFT]</dc:creator>
		<pubDate>Sat, 08 Jan 2011 01:10:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-2898</guid>
		<description>HTTP/1.0 + &quot;Connection: Keep-Alive&quot; basically behaves the same way as HTTP/1.1 in terms of persistent connections. Further, pipelining is currently of little real-world use.

However, a huge problem with dropping down to HTTP/1.0 is the loss of support for HTTP compression.</description>
		<content:encoded><![CDATA[<p>HTTP/1.0 + &#8220;Connection: Keep-Alive&#8221; basically behaves the same way as HTTP/1.1 in terms of persistent connections. Further, pipelining is currently of little real-world use.</p>
<p>However, a huge problem with dropping down to HTTP/1.0 is the loss of support for HTTP compression.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Leif Hedstrom</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-2897</link>
		<dc:creator>Leif Hedstrom</dc:creator>
		<pubDate>Fri, 07 Jan 2011 21:24:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-2897</guid>
		<description>I was going to post something, but noticed others had already posted the same comment. Most proxy servers, including my favorite, Apache Traffic Server, can easily be configured to cache URLs with query parameters.

However, there might be intermediaries between the UA and the origin, which do not allow this. E.g. transparent ISP proxies, corporate firewall proxies, etc. So, the advice is still good, you are better off versioning on the filename.

A good example of this done &quot;right&quot; is the Flickr web site.</description>
		<content:encoded><![CDATA[<p>I was going to post something, but noticed others had already posted the same comment. Most proxy servers, including my favorite, Apache Traffic Server, can easily be configured to cache URLs with query parameters.</p>
<p>However, there might be intermediaries between the UA and the origin, which do not allow this. E.g. transparent ISP proxies, corporate firewall proxies, etc. So, the advice is still good, you are better off versioning on the filename.</p>
<p>A good example of this done &#8220;right&#8221; is the Flickr web site.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Leonid</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-2896</link>
		<dc:creator>Leonid</dc:creator>
		<pubDate>Fri, 07 Jan 2011 20:26:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-2896</guid>
		<description>The advantage of putting the version in the query string is that you have to change the HTML alone. The web server does not have to know that you use versioning for 1.jpg and requests for 1.jpg?version=1 and 1.jpg?version=2 will automatically reach the same file (1.jpg). Managing the version in the filename complicates matters.

Leonid Fainberg
Co-Founder &amp; CTO
AcceloWeb</description>
		<content:encoded><![CDATA[<p>The advantage of putting the version in the query string is that you have to change the HTML alone. The web server does not have to know that you use versioning for 1.jpg and requests for 1.jpg?version=1 and 1.jpg?version=2 will automatically reach the same file (1.jpg). Managing the version in the filename complicates matters.</p>
<p>Leonid Fainberg<br />
Co-Founder &amp; CTO<br />
AcceloWeb</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eliot Sykes</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-2169</link>
		<dc:creator>Eliot Sykes</dc:creator>
		<pubDate>Sat, 10 Jul 2010 07:34:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-2169</guid>
		<description>Correction to my previous comment, forgot a &quot;not&quot;:

&quot;Or your deployment process may change the file timestamps when copying assets, even if the file has *not* changed from the last deployment.&quot;</description>
		<content:encoded><![CDATA[<p>Correction to my previous comment, forgot a &#8220;not&#8221;:</p>
<p>&#8220;Or your deployment process may change the file timestamps when copying assets, even if the file has *not* changed from the last deployment.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eliot Sykes</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-2168</link>
		<dc:creator>Eliot Sykes</dc:creator>
		<pubDate>Sat, 10 Jul 2010 07:33:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-2168</guid>
		<description>I ran into a problem with using file last modified timestamp versioning. 

Turns out using file timestamps as the version can be a bad idea depending on your deployment process and/or version control system.

Git doesn&#039;t store timestamps at all, and Subversion needs to be configured to preserve them.

Or your deployment process may change the file timestamps when copying assets, even if the file has changed from the last deployment.

As a result of this, I&#039;ve ended up using md5 sums of the files themselves for the version.

This is consistent and only changes if the file contents change.

There&#039;s more information on this solution (and an accompanying Asset Fingerprint Rails plugin) at http://blog.eliotsykes.com/2010/05/06/why-rails-asset-caching-is-broken/ .</description>
		<content:encoded><![CDATA[<p>I ran into a problem with using file last modified timestamp versioning. </p>
<p>Turns out using file timestamps as the version can be a bad idea depending on your deployment process and/or version control system.</p>
<p>Git doesn&#8217;t store timestamps at all, and Subversion needs to be configured to preserve them.</p>
<p>Or your deployment process may change the file timestamps when copying assets, even if the file has changed from the last deployment.</p>
<p>As a result of this, I&#8217;ve ended up using md5 sums of the files themselves for the version.</p>
<p>This is consistent and only changes if the file contents change.</p>
<p>There&#8217;s more information on this solution (and an accompanying Asset Fingerprint Rails plugin) at <a href="http://blog.eliotsykes.com/2010/05/06/why-rails-asset-caching-is-broken/" rel="nofollow">http://blog.eliotsykes.com/2010/05/06/why-rails-asset-caching-is-broken/</a> .</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: spenser</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-616</link>
		<dc:creator>spenser</dc:creator>
		<pubDate>Thu, 28 May 2009 09:47:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-616</guid>
		<description>One safe assumption to make in planning for cachebility is to assume that the client side and all proxies in between are totally borked, and won&#039;t get fixed any time soon.</description>
		<content:encoded><![CDATA[<p>One safe assumption to make in planning for cachebility is to assume that the client side and all proxies in between are totally borked, and won&#8217;t get fixed any time soon.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Łukasz Korzybski</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-360</link>
		<dc:creator>Łukasz Korzybski</dc:creator>
		<pubDate>Mon, 08 Dec 2008 13:31:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-360</guid>
		<description>Great test! It ultimately shows that more conservative approach which is file name versioning is a more safe method (at least now).</description>
		<content:encoded><![CDATA[<p>Great test! It ultimately shows that more conservative approach which is file name versioning is a more safe method (at least now).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: murray</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-242</link>
		<dc:creator>murray</dc:creator>
		<pubDate>Wed, 27 Aug 2008 19:20:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-242</guid>
		<description>fyi: squid is capable of caching URLs with query strings, it just wasn&#039;t default behavior due to:

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

squid actually changed their default policy with caching dynamic URLs with their 2.7 release:

http://wiki.squid-cache.org/ConfigExamples/DynamicContent

1 big caveat tho, their dev team told me this will break if you&#039;re using multiple squid nodes with sibling relationships. requests coming from cache peers have an additional header which will hang the request.</description>
		<content:encoded><![CDATA[<p>fyi: squid is capable of caching URLs with query strings, it just wasn&#8217;t default behavior due to:</p>
<p>hierarchy_stoplist cgi-bin ?<br />
acl QUERY urlpath_regex cgi-bin \?<br />
cache deny QUERY</p>
<p>squid actually changed their default policy with caching dynamic URLs with their 2.7 release:</p>
<p><a href="http://wiki.squid-cache.org/ConfigExamples/DynamicContent" rel="nofollow">http://wiki.squid-cache.org/ConfigExamples/DynamicContent</a></p>
<p>1 big caveat tho, their dev team told me this will break if you&#8217;re using multiple squid nodes with sibling relationships. requests coming from cache peers have an additional header which will hang the request.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yusuf Goolamabbas</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-239</link>
		<dc:creator>Yusuf Goolamabbas</dc:creator>
		<pubDate>Mon, 25 Aug 2008 13:00:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-239</guid>
		<description>Steve, From my memory HTTP/1.0 keepalives and HTTP/1.1 persistent connections are slightly different.

HTTP/1.0 kept-alive connections must be broken after every dynamic object
HTTP/1.0 doesn&#039;t support pipelining
HTTP/1.0 keepalives is not allowed when one speaks through a proxy.

my experience with squid has been primarily as a reverse proxy and even when I turned 
client_persistent_connections on
server_persistent_connections on

Squid did not reuse the connections in all cases
Basically, Squid can&#039;t persist the client-side connection unless it gets a Content-Length: header from the backend.</description>
		<content:encoded><![CDATA[<p>Steve, From my memory HTTP/1.0 keepalives and HTTP/1.1 persistent connections are slightly different.</p>
<p>HTTP/1.0 kept-alive connections must be broken after every dynamic object<br />
HTTP/1.0 doesn&#8217;t support pipelining<br />
HTTP/1.0 keepalives is not allowed when one speaks through a proxy.</p>
<p>my experience with squid has been primarily as a reverse proxy and even when I turned<br />
client_persistent_connections on<br />
server_persistent_connections on</p>
<p>Squid did not reuse the connections in all cases<br />
Basically, Squid can&#8217;t persist the client-side connection unless it gets a Content-Length: header from the backend.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Moushumi Kabir</title>
		<link>http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/#comment-238</link>
		<dc:creator>Moushumi Kabir</dc:creator>
		<pubDate>Mon, 25 Aug 2008 04:52:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=25#comment-238</guid>
		<description>This is very useful information. Thanks!</description>
		<content:encoded><![CDATA[<p>This is very useful information. Thanks!</p>
]]></content:encoded>
	</item>
</channel>
</rss>

