@juantxo said:
(I used random because a friend told me I can use it to solve problems of browser cache but actually I don't need it so I erase it.)
If caching is an issue then it's better to set the correct HTTP headers than adding random characters to the URL.
Here is an extract of a PHP script I use to serve plugins in either zip or rbz format:
<span class="syntaxdefault"><br /></span><span class="syntaxcomment">// fix for IE catching or PHP bug issue<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Pragma; public"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Expires; 0"</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// set expiration time<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Cache-Control; must-revalidate, post-check=0, pre-check=0"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxcomment">// browser must download file from server instead of cache<br /><br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Cache-Control; private"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">false</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// required for certain browsers<br /><br />// force download dialog<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Content-Type; application/force-download"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Content-Type; application/octet-stream"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Content-Type; application/download"</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxcomment">// use the Content-Disposition header to supply a recommended filename and<br />// force the browser to display the save dialog.<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Content-Disposition; attachment; filename=\"$requested_filename\";"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxcomment">/*<br /> The Content-transfer-encoding header should be binary, since the file will be read<br /> directly from the disk and the raw bytes passed to the downloading computer.<br /> The Content-length header is useful to set for downloads. The browser will be able to<br /> show a progress meter as a file downloads. The content-lenght can be determines by<br /> filesize function returns the size of a file.<br />*/<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Content-Transfer-Encoding; binary"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Content-Length; "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">filesize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$real_file</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">readfile</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$real_file</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span>